删除操作员内存管理

时间:2013-06-28 05:02:31

标签: c++ memory-management

我试图理解C ++中的内存管理 这是我的代码:

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

我的第一个cout工作而第二个没有,我在两者之前使用delete。谁能解释一下呢?

2 个答案:

答案 0 :(得分:3)

delete P5;
std::cout<<P5->getWeight()<<std::endl; // 1
delete P5;                             // 2
std::cout<<P5->getWeight()<<std::endl; // 3
  1. 您正在尝试取消引用指向已实现内存的指针。这是未定义的行为。什么事情都可能发生。

  2. 你正试图释放已经释放的内存。这是未定义的行为。任何事情都可能发生。

  3. goto 1

答案 1 :(得分:2)

由于您使用已删除的对象,因此cout无法保证对您有效 有时候,当你删除某些内容时,内存不会被淹没,数据仍然存在。但是下次你分配内存时它可能会重复使用 当你这样做

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

p5是一个悬空指针。只是不要在delete

之后使用它