設計時に、次のような変数を宣言することができました。
char szDesignTimeArray[120][128];
上記の宣言は、サイズ128の120配列です。実行時に、以下を割り当てる必要があります。
char szRunTime[?][128];
アレイのサイズはわかっていますが、割り当てる必要のあるアレイの数はわかりません。番号がわかっているときに、これを宣言して割り当てるにはどうすればよいですか?
すべてのThnaks
実行時に、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
}
}
参照:
行の長さが静的にわかっているので、割り当てることもできます
char (*szRunTime)[128];
// obtain row count
szRunTime = malloc(rowCount * sizeof *szRunTime);
へのポインタへのメモリchar[128]
。そうすることで、連続したメモリブロックが得られ、局所性が向上する可能性があり、必要なfree
ポインタは1つだけです。
可変長配列を使用して、行数が多すぎない場合は、
rowCount = whatever;
char szRunTime[rowCount][128];
ただし、C99以降がサポートされている場合は、最適なオプションになる可能性があります。
これを使用します。ここで、Variableは必要な配列の数です。
char **szRunTime = malloc(sizeof(char *)*Variable);
int i;
for(i=0 ; i<Variable ; i++)
szRunTime[i] = malloc(sizeof(char)*128);