1. ホーム
  2. c++

[解決済み】実行時チェックの失敗その2 - 変数'foo'周辺のスタックが破損していた。

2022-02-17 11:26:11

質問

試験勉強をしているのですが、模擬試験にこんなのが出てきました。問題は "次のコード断片はどのタイプのエラーを引き起こしますか?

エラーはないだろうと思っていたのですが、私もVS13でコンパイルすると、エラーが出ます。

実行時チェックの失敗 #2 - 変数 'foo' の周りのスタックが破損しています。

    const int MAX = 500;
    int main(void)
    {
        int foo[MAX];
        for (int i = 0; i <= MAX; i++)
        {
            foo[i] = i * 2;
            cout << foo[i] << endl;
        }

    cout << "Press any key to exit." << endl;
    cin.ignore(2);

    return 0;
    }

解決方法は?

の有効なインデックス foo0 から MAX-1 を含む。 MAX は配列の終端を過ぎています。

までを含むループが実行されます。 MAX . これは配列の終端を越えて書き込まれ、スタックを破壊します。

配列のサイズを MAX+1 そのため MAX が範囲内にある場合、またはループ条件を i < MAX に到達する前に停止するように MAX .