Код инcтрументирования объектов cookie стека обнаружил переполнение буфера
Есть класс Board, в private создаю двумерный массив указателей:
private:
Figure *board_m[8][8];
Потом в конструкторе создаю новые экземпляры классов и заношу в массив:
Board() {
cout << "Chess start" << endl;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
board_m[i][j] = new Figure;
}
}
}
В самом конце в деструкторе я удаляю все созданные ранее экземпляры:
~Board() {
cout<< "Goodbye" <<endl;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
delete board_m[i][j];
}
}
}
Но к концу программы мне в Visual Studio выдает вот такое окно:
Как это исправить?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
И как вы представляете себе
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
board_m[i][j] = new Figure;
}
}
при i==8 или j == 8, если board_m объявлен как массив 8x8? Вы пишете за пределы выделенной массиву памяти, вот и портите стек...
Интересно, что при удалении вы работаете совершенно верно:
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
delete board_m[i][j];
}
}
Вот так же поступайте и при выделении памяти...