在 C 语言中错误定位多维数组



我正在制作一个 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];只是一个典型的堆栈分配。

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

相关内容

  • 没有找到相关文章

最新更新