У меня есть класс «Сетка», который объявляет двумерный массив указателей на объекты класса «Ячейка» как свойство. Когда я создаю объект «Grid», который я вижу в отладчике, код конструктора, который инициализирует массив, вызывающий «новый Cell (p1, p2)» внутри цикла, создает указатели на ячейки, которые лежат внутри выделения для массива, таким образом искажая массив указателей.C++ выделяет ранее зарезервированную память при использовании нового конструктора Obj2() в Obj1?
Вот некоторые выдержки из кода:
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[][] !?!?!
}
}
.....
}
Может кто-нибудь сказать мне, что происходит или что я делаю не так?
Что такое конструктор для 'Cell'? – CoryKramer
Нарушение правила трех (пять C++ 11), избежание многомерных массивов –
С целью поиска ошибки я сменил конструктор ячейки на: Cell :: Cell (int r, int c) { { row = r; col = c; } где row и col являются свойствами Cell – Mark