1

array[size]実行前に定義された長さの配列 (コマンド ライン引数に依存) を で定義する場合と使用して定義する場合の違いは何malloc()ですか? array[i]スタックに置かれたデータにつながりmalloc()、ヒープを使用します[このスタックオーバーフローを参照してください]

そのため、大きなデータではスタックオーバーフローが発生する可能性がありますが、新しいマシンでは合計 30charintで問題はありません (これによると、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を使用しています。

4

1 に答える 1