我正在创建一个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];
然后它可以工作,但它在堆栈而不是堆上。有人可以帮忙吗?
答案 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);
无法分配数组,指针和数组实际上是不同类型的对象。
此外:
sizeof(char)
为1
答案 2 :(得分:0)
您需要将其分配给指针,然后您可以将其转换为数组。