#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" был поврежден. Я проверил другие потоки, но не нашел ответа. Что я делаю неправильно?
Массивы в 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;
C/C++ использует индексы на основе 0 для массивов. Поэтому, если вы создаете массив типа int array[3]
, к первому элементу обращается array[0]
. Последний элемент - это array[2]
. Вы получаете повреждение стека, если вы пишете array[3]
потому что он не является частью массива и вы пишете ему.