В моем классе у меня есть динамически распределенный массив указателей.Мое объявление:
array = new Elem* [size];
for (int i = 0; i < size; i++) {
array[i] = NULL;
}
Итак, существует массив указателей, где каждый указатель указывает на простую структуру Elem.
Главный вопрос заключается в том, как правильно освободить массив.Если я использую только:
for (int i = 0; i < size; i++) {
delete array[i];
}
Valgrind сообщает о 1 не освобожденном блоке, который прослеживается до строки, где 'array = new Elem * [size];'состояния.
С другой стороны, если я добавлю к предыдущему коду:
delete array;
То, что я считаю правильным, valgrind сообщает о 0 не освобожденных блоках, что идеально, НО это сообщает
Mismatched free() / delete / delete []
точно в той строке, где 'delete array;'является.Я тоже попробовал 'delete [] array', но это тоже просто "1 не освобожденный блок"!Если бы кто-нибудь смог мне правильно объяснить это, это было бы очень ценно.
РЕДАКТИРОВАТЬ: Таким образом, использование:
for (int i = 0; i < size; i++) {
delete array[i];
}
delete[] array;
работает, вероятно, нормально.Это работает в одном из моих классов (у меня есть два подобных), другой все еще сообщает о некоторой небольшой утечке.Я бы подумал, что это просто небольшая ошибка где-то, но valgrind все еще указывает на строку, где стоит
array = new Elem* [size];
.
EDIT2: Я тоже это решил, спасибо за ваш изнурительный вклад !!