我正在制作一个 C 函数以集成到 Python 中,该函数基本上创建了一个二维字符数组(每行都有恒定的已知长度),将一些数据读取到其中,从中构建一个 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];
然后它可以工作,但它在堆栈而不是堆上。谁能帮忙?
这样做
char (*arrs)[rowSize] = malloc(bytesPerTable);
数组不能分配给,指针和数组实际上是不同类型的对象。
也:
- 不要投马洛克的回归
- 根据定义
sizeof(char)
1
的是:
char** arrs = (char **)malloc(interleaved * sizeof(char*));
for(i = 0; i < bytesPerTable; i++)
arrs[i] = (char*)malloc(rowSize * sizeof(char));
这:char arrs[interleaved][rowSize];
只是一个典型的堆栈分配。
您需要将其分配给指针,然后可以将其转换为数组。