我正在尝试为三级指针分配内存。我的代码如下:
int i, j;
int n = 4;
int ***X = (int ***) malloc(sizeof(int) * n);
for(i = 0; i < n; i++){
printf("h\n");
X[i] = (int **) malloc(sizeof(int) * n);
for(j = 0; j < n; j++){
printf("j\n");
X[i][j] = (int *) malloc(sizeof(int) * n);
}
}
X[0][0][0] = 14;
X[1][2][2] = 15;
当我在Linux上运行时,会出现
*** glibc detected *** triplePointer: double free or corruption (out): 0x0000000000ea3050 ***
错误,但我完全不知道它的含义。但是当我在Windows上使用-Wall标志运行时,没有错误。也许有人可以帮我找到我的错误所在。此外,我目前正在硬编码,通过语句
X[0][0][0] = 14;
。是否有一种方法可以通过某些随机值填充这个三重指针的所有插槽?
sizeof()
参数正确外,其余参数均不正确。我怀疑在Windows下编译时您正在使用32位,这种情况下'int'和任意数据指针的大小相同。将它编译为64位进程,您可能会看到与Linux发行版类似的行为。 - WhozCraig