可変長配列について懸念があります。配列を動的に割り当てたい場合、十分なメモリを割り当てることができず、プログラムでこれに適切に応答できる場合は、null になります。可変長配列では、この情報を取得できません。これをどうすればいいですか?
4548 次
1 に答える
35
VLA は基本的に常に安全ではないということは正しいです。唯一の例外は、固定サイズの配列を作成しても安全だと思われるサイズよりも大きくしないようにする場合です。その場合は、固定サイズの配列を使用することもできます。VLA が問題を解決できない (スタック オーバーフロー) か、解決できるかの違いを生む再帰アルゴリズムのあいまいなクラスが 1 つありますが、ほとんどの場合、VLA を使用しないことをお勧めします。
ただし、VLA 型が役に立たないというわけではありません。VLA は悪い/危険ですが、VLA 型へのポインターは非常に便利です。次のように、手動で次元計算を行うことなく、 ( 経由でmalloc
) 多次元配列を動的に割り当てることができます。
size_t n;
double (*matrix)[n] = malloc(n * sizeof *matrix);
としてアドレス指定可能な n 行 n 列の行列を取得しmatrix[i][j]
ます。
于 2011-09-06T21:58:11.703 に答える