2

設計時に、次のような変数を宣言することができました。

char szDesignTimeArray[120][128];

上記の宣言は、サイズ128の120配列です。実行時に、以下を割り当てる必要があります。

char szRunTime[?][128];

アレイのサイズはわかっていますが、割り当てる必要のあるアレイの数はわかりません。番号がわかっているときに、これを宣言して割り当てるにはどうすればよいですか?

すべてのThnaks

4

3 に答える 3

6

実行時に、Row_Sizeも知っていると思います。

次のように、実行時に多次元配列を動的に割り当てることができます。

#include <stdlib.h>

int **array;
array = malloc(nrows * sizeof(int *));
if(array == NULL)
    {
    fprintf(stderr, "out of memory\n");
    exit or return
    }
for(i = 0; i < nrows; i++)
    {
    array[i] = malloc(ncolumns * sizeof(int));
    if(array[i] == NULL)
        {
        fprintf(stderr, "out of memory\n");
        exit or return
        }
    }

参照:

http://www.eskimo.com/~scs/cclass/int/sx9b.html

于 2012-09-07T12:06:18.097 に答える
3

行の長さが静的にわかっているので、割り当てることもできます

char (*szRunTime)[128];
// obtain row count
szRunTime = malloc(rowCount * sizeof *szRunTime);

へのポインタへのメモリchar[128]。そうすることで、連続したメモリブロックが得られ、局所性が向上する可能性があり、必要なfreeポインタは1つだけです。

可変長配列を使用して、行数が多すぎない場合は、

rowCount = whatever;
char szRunTime[rowCount][128];

ただし、C99以降がサポートされている場合は、最適なオプションになる可能性があります。

于 2012-09-07T12:18:57.063 に答える
1

これを使用します。ここで、Variableは必要な配列の数です。

char **szRunTime = malloc(sizeof(char *)*Variable);
int i;
for(i=0 ; i<Variable ; i++)
    szRunTime[i] = malloc(sizeof(char)*128);
于 2012-09-07T12:08:18.603 に答える