Проблемы с массивом Noobish: ошибка проверки времени выполнения № 2 - стек вокруг переменной 'arr' поврежден

Я буду очень честен / честен здесь - я новичок в 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, я не получаю ошибку? И, конечно, что я должен изменить, чтобы вызов функции не вызывал ошибку?

1 ответ

Решение

Это ваши проблемы: 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++)

Другие вопросы по тегам