删除操作员内存管理

Delete operator memory management

本文关键字:管理 内存 操作员 删除      更新时间:2023-10-16

我正在努力理解C++中的内存管理
这是我的代码:

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

我的第一个cout有效,第二个不有效,因为我在两者之前都使用了delete。有人能解释一下吗?

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

  2. 您正在尝试释放已释放的内存。这是未定义的行为。任何事情都有可能发生。

  3. goto1

由于使用的是已删除的对象,因此不能保证cout对您都有效
只是有时候,当你删除一些东西时,内存没有被覆盖,数据仍然存在。但下次分配内存时,它可能会被重用
当你做

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

p5是一个悬空指针。只是不要在delete 之后使用它