1. ホーム
  2. c++

[解決済み] Noobish Arrayの問題。実行時チェックの失敗 #2 - 変数 'arr' の周りのスタックが破損していました。

2022-02-08 13:20:11

質問

正直なところ、私は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;
    }
}


また、関数呼び出しの代わりに、関数本体に含まれるすべてのコードをmainに含めた場合、ランタイムエラーが発生しないことを述べておきたいと思います。なぜ、関数に含まれる場合はランタイムエラーが発生するのに、mainに含まれるだけではエラーが発生しないのでしょうか?もちろん、関数の呼び出しでエラーが発生しないようにするには、何を変更しなければならないのでしょうか?

解決方法は?

それはあなたの問題です。 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++)