This question already has answers here:
What happens when you deallocate a pointer twice or more in C++?

(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/

10-11 23:12
查看更多