This question already has answers here:
What happens when you deallocate a pointer twice or more in C++?
(7 个回答)
3年前关闭。
我知道“两次删除相同的内存”错误可能发生在两个
指针指向同一个动态分配的对象。如果
应用于其中一个指针,然后对象的内存返回给
免费商店。如果我们随后删除第二个指针,那么空闲的
存储可能已损坏。
但是为什么这段代码不会导致运行时错误?
(7 个回答)
3年前关闭。
我知道“两次删除相同的内存”错误可能发生在两个
指针指向同一个动态分配的对象。如果
delete
是应用于其中一个指针,然后对象的内存返回给
免费商店。如果我们随后删除第二个指针,那么空闲的
存储可能已损坏。
但是为什么这段代码不会导致运行时错误?
string *str_1 = new string;
auto str_2 = str_1;
*str_1 = "AAA";
cout<<*str_2<<endl;
delete str_1;
delete str_2; // No Error
// Prints AAA
最佳答案
两次删除相同的内存是未定义的行为。任何事情都可能发生,包括一无所有。它可能例如稍后导致崩溃。
关于C++ 删除指针两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25138126/