2013-06-28 112 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