Перейду сразу к коду
- Код: Выделить всё
std::vector<std::vector<int>> Allowing;
size_t SquareCountX, SquareCountY;
//...
Allowing.resize(SquareCountX);
for(size_t i = 0; i < SquareCountX; ++i)
{
Allowing.resize(SquareCountY); //Но зачем?
for(size_t j = 0; j < SquareCountY; ++j)
{
Allowing[i].push_back(-1);
}
}
//...
int GetAllowingValue(size_t x, size_t y) { return Allowing[x][y]; }
void SetAllowingValue(size_t x, size_t y, int val) { Allowing[x][y] = val; }
Для меня неясна необходимость в повторном вызове Allowing.resize но уже с SquareCountY. Замечу что в примере SquareCountX, SquareCountY были равными. Если б там было нечто Allowing[i].resize(SquareCountY); вопросов бы не было. Но нет.
Вот как я вижу данный код на Си (c привлечением new/delete с С++, без проверок)
- Код: Выделить всё
int **Allowing = new int * [SquareCountX];
for(size_t i = 0; i < SquareCountX; ++i)
Allowing[i] = new int [SquareCountY];
for(size_t j = 0; j < SquareCountY; ++j)
Allowing[i][j] = -1;
//...
for(size_t i = 0; i < SquareCountX; ++i)
{
delete [] Allowing[i];
Allowing[i] = NULL;
}
delete [] Allowing;
Allowing = NULL;
P.S.
IDE - Visual C++ 2008.
Добавленно:
Похоже ошибка в примере.
Вот правильный пример http://www.codepedia.com/1/Cpp2dVector применения метода resize к "двумерному" вектору.