while(true)
{
char array[1024] = {0};
....
.....
}
上記のコードストリップでは、スタックオーバーフローが発生する可能性がありますか、またはすべてのループでスタックが巻き戻されていますか?前もって感謝します。静的配列はwhileループで初期化されます。スタックオーバーフローはこの場合発生します
while(true)
{
char array[1024] = {0};
....
.....
}
上記のコードストリップでは、スタックオーバーフローが発生する可能性がありますか、またはすべてのループでスタックが巻き戻されていますか?前もって感謝します。静的配列はwhileループで初期化されます。スタックオーバーフローはこの場合発生します
array
の有効範囲は、ループの特定の反復に限定されます。
したがって、新しいコンパイルではarray
が新しく作成されますが、良いコンパイラでは副作用がなければこれを最適化することができます。
何が起きても、繰り返しの宣言と初期化のためにスタックオーバーフローエラーが発生することはありません。array
自動保存期間を持つオブジェクトの有効期間は、定義されたブロックです。この場合のブロックは、whileループの始めから開始し、whileループの最後で終了します。理論的には、ループに入るたびにオブジェクトが再割り当てされます。
実際には、コンパイラはスタックの前にループの前に、あるいは関数の先頭にも十分なスペースを割り当てて、毎回それを使用します。
スタックオーバーフローの可能性はありません。
whileループにはchar配列[]のみがありますか?それとも他の変数がありますか? – Karthick
文字配列は –
ですfar配列は固定サイズなので問題ありません。 [VLA](https://en.wikipedia.org/wiki/Variable-length_array)は別の話です。 – LPs