我有一个3D数组
char **arr[1];
我动态分配它:
*arr = calloc(10, sizeof(char*)); // Will be using 0-9
for(i = 0; i < 10; i ++)
*arr[i] = malloc(3); // will be using 0-2
它崩溃了。即便如此,我无法为您提供整个库,我在其中读取/写入该数组,但问题的答案是正确的分配,将帮助我调试并抛弃错误或不可能分配的可能性。
答案 0 :(得分:0)
我会这样做:
char** arr;
arr = malloc(10 * sizeof *arr);
if (!arr)
return -1;
for (int i = 0; i < 10; i++)
{
arr[i] = malloc(3);
if (!arr[i])
return -1;
}
如果你真的需要这个3d数组,那么正确的方法应该是:
char** arr[1];
arr[0] = malloc(10 * sizeof **arr);
if (!arr[0])
return -1;
for (int i = 0; i < 10; i++)
{
arr[0][i] = malloc(3);
if (!arr[0][i])
return -1;
}
当你完成后你应该释放这样的记忆(这适用于第二个例子):
for (int i = 0; i < 10; i++)
free(arr[0][i]);
free(arr[0]);
其他方法有:char arr[3][10];
或char arr[1][3][10];
,但只有1个数值的数组并没有多大意义。