我试图理解C ++中的内存管理 这是我的代码:
Person *P5 = new Person();
delete P5;
std::cout<<P5->getWeight()<<std::endl;
delete P5;
std::cout<<P5->getWeight()<<std::endl;
我的第一个cout工作而第二个没有,我在两者之前使用delete
。谁能解释一下呢?
答案 0 :(得分:3)
delete P5;
std::cout<<P5->getWeight()<<std::endl; // 1
delete P5; // 2
std::cout<<P5->getWeight()<<std::endl; // 3
您正在尝试取消引用指向已实现内存的指针。这是未定义的行为。什么事情都可能发生。
你正试图释放已经释放的内存。这是未定义的行为。任何事情都可能发生。
goto
1
答案 1 :(得分:2)
由于您使用已删除的对象,因此cout
无法保证对您有效
有时候,当你删除某些内容时,内存不会被淹没,数据仍然存在。但是下次你分配内存时它可能会重复使用
当你这样做
Person *P5 = new Person();
delete P5;
p5是一个悬空指针。只是不要在delete