3

私はかなり正直に/率直に言います-私はC ++、一般的なコンピュータープログラミング、さらにこのサイトの初心者でもあります。質問の前に、実際には自分自身に関連している可能性のある他の質問を実際に調べたと言いますが、それらは私の範囲外にあるように感じました. そうは言っても、ここに私の問題があります:

次のエラー メッセージが表示されます。

「実行時チェックの失敗 #2 - 変数 'arr' の周りのスタックが壊れていました。」

これが私のコードです。これは、いくつかの配列の練習のための基本的な小さなことです。関数 multiTable は乗算表を出力します。


#include <iostream>
#include <iomanip>

using namespace std;

void multiTable();

int main()
{
    multiTable();
    return 0;
}

//Prints a 9 by 9 multiplication table;
void multiTable()
{    
    const int row = 9, col = 9;
    int arr[row][col];

    for(int i = 1; i <= row; i++)
    {
        for(int j = 1; j <= col; j++)
        {   
            arr[i][j] = j * i;
            cout << setw(3);            
            cout << arr[i][j];
        }
        cout << endl;
    }
}

また、関数呼び出しの代わりに、関数本体内に含まれるすべてのコードをメインに含めただけで、実行時エラーが発生しないことにも言及したいと思います。関数内に含まれていると実行時エラーが発生するのに、メインだけの場合はエラーが発生しないのはなぜですか? そしてもちろん、関数呼び出しでエラーが発生しないようにするには、何を変更する必要がありますか?

4

1 に答える 1

2

これらはあなたの問題です:配列for(int i = 1; i <= row; i++)for(int j = 1; j <= col; j++) カウントは から始まり0ます。したがって、 for ループは次のようになります (から始まり、からの部分0を省略します)。=<=

for(int i = 0; i < row; i++)for(int j = 0; j < col; j++)

于 2013-07-07T09:11:16.577 に答える