混合动态和静态分配

时间:2014-12-05 10:11:13

标签: c arrays pointers dynamic

我有一个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

它崩溃了。即便如此,我无法为您提供整个库,我在其中读取/写入该数组,但问题的答案是正确的分配,将帮助我调试并抛弃错误或不可能分配的可能性。

1 个答案:

答案 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个数值的数组并没有多大意义。