2013-06-28 2 views
1

Я пытаюсь понять управление памятью на C++.
Вот мой код:Удаление управления памятью оператора

Person *P5 = new Person(); 
delete P5; 
std::cout<<P5->getWeight()<<std::endl; 
delete P5; 
std::cout<<P5->getWeight()<<std::endl; 

Мои первые COUT работы и второй не делает, где, как я использовал delete перед тем как. Может кто-нибудь объяснить это?

+0

Возможно, вы ударяете Неопределенное поведение –

+4

Ваши последние три строки вызывают UB. – soon

+1

Зачем вам печатать что-то после удаления – aaronman

ответ

3
delete P5; 
std::cout<<P5->getWeight()<<std::endl; // 1 
delete P5;        // 2 
std::cout<<P5->getWeight()<<std::endl; // 3 
  1. Вы пытаетесь указатель разыменования, который указывает уже понял, память. Это неопределенное поведение. Может произойти все, что угодно.

  2. Вы пытаетесь освободить уже освобожденную память. Это неопределенное поведение. Может произойти все, что угодно.

  3. goto

2

Ни cout гарантированно работать для вас, так как вы используете удаленный объект.
Это просто, что иногда, когда вы что-то удаляете, память не перезаписывается, данные все еще там. Но он может быть повторно использован в следующий раз, когда вы выделите память.
Когда вы

Person *P5 = new Person(); 
delete P5; 

p5 является оборванным указателем. Просто не используйте его после delete