Что заставит delete оставить значения мусора в полях данных моего класса? - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть класс узла, который содержит 3 указателя узла и 2 целых числа.Я присваиваю все узлы с new, но когда я вызываю delete для них, целые числа устанавливаются на -17891602, и это мешает остальной части проверки границ моего кода.Что заставит delete сделать это?

Ответы [ 3 ]

5 голосов
/ 03 ноября 2011

После delete эта память больше не ваша. Не проверяйте это, ничего не делайте с этим, потому что, если вы это сделаете, у вас есть Неопределенное Поведение. Это, вероятно, скоро будет использовано повторно.

Приветствия и hth.,

0 голосов
/ 03 ноября 2011

Если вы разрабатываете для Linux и используете gdb, вы можете установить точку наблюдения с помощью команды watch для GDB. Это может помочь определить, когда было перезаписано место в памяти.

0 голосов
/ 03 ноября 2011

Проверьте, получают ли поля указателя также новые значения.Они равны 0xfeeefeee?(Это -17891602 в шестнадцатеричном формате.) Ваш диспетчер памяти может перезаписывать освобожденную память, поэтому легче распознать в аварийных дампах, когда вы пытаетесь читать или записывать память, к которой вы больше не должны обращаться.

Если вы 'читая освобожденные объекты для проверки границ, вы полагаетесь на неопределенное поведение.Посмотрите документацию по вашей среде, чтобы узнать, что она делает с освобожденной памятью.Ваша проверка границ должна будет сотрудничать с ним;Вы не можете предполагать, что это будет работать в общем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...