0

私はPythonに統合するC関数を作成しています。これは、基本的にcharの2次元配列を作成し(各行は一定の既知の長さです)、データを読み取り、そこから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)のメモリブロックを割り当てて、それを必要な2次元配列に編成したいと思います。単に宣言すれば

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 に答える