1

我正在尝试了解 C++ 中的内存管理。
这是我的代码:

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

我的第一个 cout 有效,第二个无效,就像我delete之前使用的那样。谁能解释一下?

4

2 回答 2

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

于 2013-06-28T05:10:08.033 回答
2

两者都不能cout保证对您有用,因为您使用的是已删除的对象。
只是有时候,当你删除一些东西时,内存并没有被覆盖,数据还在。但是下次分配内存时可能会重复使用它。
当你这样做

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

p5 是一个悬空指针。以后别用了delete

于 2013-06-28T05:10:12.627 回答