当例程 "free" 在 C++ 中的 "try" 块中失败时会发生什么

what happens when routine "free" fails in a "try" block in c++

通常,如果在调用例程“free”时出现内存问题,程序将立即停止,并显示错误消息,告知错误的详细信息。现在假设在“try”块中调用了“free”。如果调用发生错误,程序会立即停止并显示错误消息,还是程序会在退出前完成“try”块的执行并显示错误消息?

free 如果您的代码中没有出现某些预先存在的问题,就不会出错,这几乎可以肯定是未定义行为的结果。一旦进入鼻魔之地,就没有任何保证。 free 没有异常的概念(它是一个 C 函数,没有 C++ 特性),甚至没有错误 return 代码;如果你破坏了你的堆,程序就已经搞砸了,接下来会发生什么。实际上,我希望有四种可能性之一:

  1. free 没有注意到损坏的堆,只是默默地让事情变得更糟(try 块继续 运行,因为它没有意识到任何错误)
  2. free 注意到损坏的堆,程序立即死亡(没有 try/catch 处理)
  3. free 正在对指向 invalid/unallocated 内存区域的指针进行操作,你死于段错误、总线错误等(同样,没有 try/catch处理)
  4. 指针指向分配的内存,不属于堆;表现得像#1 或#2,这取决于“heap-like”它碰巧如何看待代码。