РЕДАКТИРОВАТЬ: перечитайте ваш код более внимательно. Ваш оператор назначения не работает. Вы забыли выделить каждую строку в сетке, которую вы назначаете.
Отдельный пункт: вам не нужны все эти распределения. Вам нужен только один. Сделайте grid
a char*
вместо char**
и запишите это так. Я оставляю здесь проверки на ошибки распределения.
Grid::Grid(unsigned int grid_size)
:size(grid_size), grid(0)
{
if (size > 0)
{
grid = new char[size*size];
}
}
Grid::Grid(Grid const &other_grid)
:size(0)
{
CopyFrom(other_grid);
}
Grid::~Grid()
{
if (size > 0)
{
delete [] grid;
grid = 0;
}
}
Grid& Grid::operator=(Grid const &other_grid)
{
CopyFrom(other_grid);
return *this;
}
void Grid::CopyFrom(Grid const &other_grid)
{
if (size > 0) delete [] grid;
size = newSize;
if (newSize > 0)
{
grid = new char[newSize*newSize];
memcpy(grid, other_grid.grid, newSize*newSize);
}
else
{
grid = 0;
}
}
Тогда, если вы хотите получить доступ к байту в сетке в точке x, y, вы можете написать его следующим образом. (Я оставлю вам проверку соответствующих границ).
char Grid::GetByte(int x, int y)
{
return grid[y*size + x];
}