0

我正在制作一个 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];

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

4

3 回答 3

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

于 2012-08-16T14:02:30.793 回答
2

像这样做

char (*arrs)[rowSize] = malloc(bytesPerTable);

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

还:

  • 不要强制返回 malloc
  • sizeof(char)1根据定义
于 2012-08-16T14:02:38.907 回答
0

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

于 2012-08-16T14:03:04.780 回答