例行“ free”在c ++中的“ try”块中失败时会发生什么

问题描述

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

解决方法

free不会出错,而不会在代码中出现一些预先存在的问题,这几乎肯定是未定义行为的结果。一旦您处于鼻恶魔之地,就无法保证。 free没有例外的概念(它是C函数,没有C ++功能),甚至没有错误返回码。如果您破坏了堆,程序已经被搞砸了,那么接下来的事情可能就是任何事情。实际上,我希望有以下四种可能性之一:

  1. free不会注意到损坏的堆,只会使情况变得更糟(try块继续运行,因为它没有意识到有什么问题)
  2. free注意到损坏的堆,程序立即死亡(无try / catch处理)
  3. free对指向无效/未分配内存区域的指针进行操作,并且死于段错误,总线错误等。(同样,没有try / catch处理)
  4. 指针指向不属于堆的已分配内存;行为就像#1或#2一样,具体取决于代码看起来如何“类似堆”。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...