Ошибка проверки времени выполнения # 2 - стек вокруг переменной 'my2DArray' поврежден

0
#include "stdafx.h"
#include <iostream>
using namespace std;
#define NUMBER_OF_PLAYERS 3


int _tmain(int argc, _TCHAR* argv[])
{
    int my2DArray[3][3];
    my2DArray[1][1] = 1;
    my2DArray[1][2] = 2;
    my2DArray[1][3] = 3;

    my2DArray[2][1] = 4;
    my2DArray[2][2] = 5;
    my2DArray[2][3] = 6;

    my2DArray[3][1] = 7;
    my2DArray[3][2] = 8;
    my2DArray[3][3] = 9;

    for (int y = 0; y < 3; y++)
    {
        for(int x = 0; x < 3; x++)
        {
            cout << my2DArray[x][y]; 
        }
        cout << endl;
    }
    return 0;
}

Когда я запускаю этот код C++, появляется сообщение: "Ошибка проверки времени выполнения" # 2 - Урон вокруг переменной "my2DArray" был поврежден. Я проверил другие потоки, но не нашел ответа. Что я делаю неправильно?

Теги:

2 ответа

0
Лучший ответ

Массивы в C++ основаны на 0. Так быстро исправить:

my2DArray[0][0] = 1;
my2DArray[0][1] = 2;
my2DArray[0][2] = 3;

my2DArray[1][0] = 4;
my2DArray[1][1] = 5;
my2DArray[1][2] = 6;

my2DArray[2][0] = 7;
my2DArray[2][1] = 8;
my2DArray[2][2] = 9;
0

C/C++ использует индексы на основе 0 для массивов. Поэтому, если вы создаете массив типа int array[3], к первому элементу обращается array[0]. Последний элемент - это array[2]. Вы получаете повреждение стека, если вы пишете array[3] потому что он не является частью массива и вы пишете ему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню