Удаление указателя не влияет на то, остается ли указатель в контейнере. Поскольку вы не показали программу, демонстрирующую, что узел остается в списке, я полагаю, что он не остается после вызова erase
.
Если вы выделили остроконечный объект new
, тогда вы должны в какой-то момент указать delete
. Если программа выйдет из строя при удалении указателя здесь, это означает, что либо
- Указатель не инициализирован и никогда не указывал на действительный объект.
- Указатель был действительным, но заостренный объект уже был уничтожен, а указатель уже недействителен.
- Указатель действителен, но указывает на объект, который не был создан с помощью
new
.
- Указанный объект не находится в допустимом состоянии, от которого зависит его деструктор.
Это не представляется возможным «тест» действительность указателя в программе (для проверки, является ли его недействительным, но удаление нуль в порядке и не врезаться, за исключением, так что это не проблема в вашем случае) , Вы должны проанализировать свою программу и гарантировать действительность самостоятельно. Умные указатели намного легче рассуждать о правильности указателей. Я рекомендую вам их использовать.
Привет, вы пытались играть в gamelist.erase, а затем удалять? –
Привет @JuanPablo. Да, я попробовал. Такая же проблема ... –
Вы уверены, что вы 'new'ed память @' * it' и что она еще не освобождена? Вы можете попробовать сохранить '* it' во временном' Person * ', удалить и удалить временное. –