array[size]
実行前に定義された長さの配列 (コマンド ライン引数に依存) を で定義する場合と使用して定義する場合の違いは何malloc()
ですか? array[i]
スタックに置かれたデータにつながりmalloc()
、ヒープを使用します[このスタックオーバーフローを参照してください]
そのため、大きなデータではスタックオーバーフローが発生する可能性がありますが、新しいマシンでは合計 30char
秒int
で問題はありません (これによると、Windows のスタックは約 1MBです)。
したがって、おそらく明らかな何かが欠けています。
私が理解している限り、で定義されているmain()
場合、2つは同じである必要があります。
例 1
int size; // depends on some logic
char array[size];
例 2
int size; // depends on some logic
array= (char *)malloc(size * sizeof(char));
free(array); // later after use
しかし、関数内で配列を使用し、それをポインター ( func(char* array)
) または配列 ( funct(char array[])
) として渡すと、gdb-debugger は、関数が #1 で壊れたデータを渡されたことを知らせてくれますmalloc()
。
はarray[i]
、コンパイル時に決定されない場合に使用しても問題ありませんか? それはスコーピングの問題ですか?この回答にはそのようなことを示唆するコメントがありますが、それがここに当てはまるかどうかはよくわかりません。
C99を使用しています。