Код ин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 выдает вот такое окно: Код инcтрументирования объектов cookie стека обнаружил переполнение буфера Как это исправить?


Ответы (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];
    }
}

Вот так же поступайте и при выделении памяти...

→ Ссылка