在C中mallocing一个多维数组

时间:2012-08-16 13:59:44

标签: c multidimensional-array malloc

我正在创建一个C函数来集成到Python中,它基本上创建了一个二维chars数组(每行具有常量,已知长度),将一些数据读入其中,从中构建一个numpy数组,并将其返回给Python中的调用函数。我不是C的专家,但我相信为了在退出创建它的函数后保留内存中的数组,我需要使用malloc在堆上分配它。所以我正在尝试这一行:

//rowSize and interleaved are both integers; bytesPerTable is equal to rowSize * interleaved
char arrs[interleaved][rowSize] = (char **)malloc(bytesPerTable * sizeof(char));

这给了我编译错误

error: variable-sized object may not be initialized

我不确定如何使这项工作。我想分配一个我需要的内存块(bytesPerTable),然后将其组织成所需的二维数组。如果我只是声明

char arrs[interleaved][rowSize];

然后它可以工作,但它在堆栈而不是堆上。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

你需要的是:

char** arrs = (char **)malloc(interleaved * sizeof(char*));
for(i = 0; i < bytesPerTable; i++)
    arrs[i] = (char*)malloc(rowSize * sizeof(char));

这:char arrs[interleaved][rowSize];只是典型的堆栈分配。

答案 1 :(得分:2)

这样做

char (*arrs)[rowSize] = malloc(bytesPerTable);
无法分配

数组,指针和数组实际上是不同类型的对象。

此外:

  • 不要强制转换malloc
  • 根据定义,
  • sizeof(char)1

答案 2 :(得分:0)

您需要将其分配给指针,然后您可以将其转换为数组。