我正在尝试了解 C++ 中的内存管理。
这是我的代码:
Person *P5 = new Person();
delete P5;
std::cout<<P5->getWeight()<<std::endl;
delete P5;
std::cout<<P5->getWeight()<<std::endl;
我的第一个 cout 有效,第二个无效,就像我delete
之前使用的那样。谁能解释一下?
我正在尝试了解 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
您正在尝试取消引用指向已实现内存的指针。这是未定义的行为。什么事情都可能发生。
您正在尝试释放已释放的内存。这是未定义的行为。什么事情都可能发生。
goto
1
两者都不能cout
保证对您有用,因为您使用的是已删除的对象。
只是有时候,当你删除一些东西时,内存并没有被覆盖,数据还在。但是下次分配内存时可能会重复使用它。
当你这样做
Person *P5 = new Person();
delete P5;
p5 是一个悬空指针。以后别用了delete