У меня есть класс «Grid», который объявляет двумерный массив указателей на объекты класса «Cell» в качестве свойства. Когда я создаю экземпляр объекта «Grid», я вижу в отладчике, что код конструктора, который инициализирует массив, вызывающий «new Cell (p1, p2)» внутри цикла, создает указатели на ячейки, которые лежат внутри выделения для массива, таким образом портит массив указателей.
Вот некоторые выдержки из кода:
class Cell {
public:
Cell( int a, int b );
}
class Grid {
public:
Grid();
Cell * g[6][7];
}
// code:
Grid::Grid() {
// g is allocated to address x'13d1-19b8 (extending for 42*4=168 bytes)
for ( int r=0; r<6; r++ )
{
for ( int c=0; c<7; c++ )
{
g[r][c] = new Cell( r, c ); // g[0][0] now contains x'13d1-19d8 which is INSIDE g[][] !?!?!
}
}
.....
}
Кто-нибудь может сказать мне, что происходит или что я делаю неправильно?
Я перестраивал проект по частям, пытаясь выяснить, какая часть кода вызывает повреждение. Однако я не мог воспроизвести ошибку. Теперь у меня есть то, что мне кажется, идентичная копия оригинального кода, и она работает просто отлично. (Оригинальный все еще не работает.) Не вижу, где я допустил ошибку с первой попытки, но я счастлив, что могу прогрессировать.
Спасибо тем (@Cameron), которые пытались помочь, и, может быть, однажды @Dieter объяснит мне, почему он отверг мой вопрос …;)