Моя программа заканчивается правильно, и, согласно Valgrind, нет утечки памяти.
Но следующее сообщение появляется, когда метод объекта запускается в первый раз.
Use of uninitialised value of size 8
Получение более подробной информации о вышеупомянутых yeilds
==18787== Use of uninitialised value of size 8
==18787== at 0x4017F3: Grid::init(int) (grid.cc:90)
==18787== by 0x401D2A: main (main.cc:43)
==18787== Uninitialised value was created by a stack allocation
==18787== at 0x401BE4: main (main.cc:11)
Я также вижу следующие сообщения:
Conditional jump or move depends on uninitialised value(s)
Invalid free() / delete / delete[] / realloc()
Address 0x7ff000b08 is on thread 1 stack
Вот код Grid :: init
void Grid::init(int n){
if (!(&(this->theGrid))) { this->clearGrid(); } //If non-empty, destroys grid
this->theGrid = new Cell*[n]; //Create new grid of size n x n
this->td = new TextDisplay(n); //new Text Display
for (int i = 0; i < n; i++){
this->theGrid[i] = new Cell[n];
for(int j = 0; j < n; j++){ //Cell initializations
(this->theGrid[i][j]).setDisplay(this->td); //set display
(this->theGrid[i][j]).setCoords(i, j); //set co-ordinates
(this->theGrid[i][j]).setState(0); //default state
}
}
}
Я предполагаю, что у вас есть код, который выглядит так:
Условный переход или перемещение зависят от неинициализированного значения (значений):
bool value /* nothing */;
if (value) {
}
Недействительный бесплатный:
char* buf = new char[10000];
buf = &x;
delete [] buf;
Теперь, когда вы разместили код, я предполагаю, что строка 90 - это:
if (!(&(this->theGrid))) { this->clearGrid(); } //If non-empty, destroys grid
И дело в том, что вы не инициализируется theGrid
к nullptr
в конструкторе, а затем в конечном итоге, возможно, delete[]
-ing в non- new[]
-ed массив. Кроме того, этот код будет выглядеть чище, если вы только что сделали:
if (!theGrid) {
clearGrid();
}
Вам не нужно this->
везде. И я не понимаю, почему вы берете адрес theGrid
.
this->
везде. !theGrid
проверяет theGrid
. Но вы действительно хотите проверить, что theGrid
равен NULL, а не является ли адрес theGrid
ненулевым. Это не эквивалентно.
Grid::init
и какая строка является строкой 90?