问题描述
通常,如果在调用例程“ free”时发生内存问题,程序将立即停止并显示错误消息,告知错误的详细信息。现在假设在“ try”块中调用了“ free”。如果调用发生错误,程序将立即以一条错误消息停止运行,还是在退出并显示错误消息之前完成“ try”块的执行?
解决方法
free
不会出错,而不会在代码中出现一些预先存在的问题,这几乎肯定是未定义行为的结果。一旦您处于鼻恶魔之地,就无法保证。 free
没有例外的概念(它是C函数,没有C ++功能),甚至没有错误返回码。如果您破坏了堆,程序已经被搞砸了,那么接下来的事情可能就是任何事情。实际上,我希望有以下四种可能性之一:
-
free
不会注意到损坏的堆,只会使情况变得更糟(try
块继续运行,因为它没有意识到有什么问题) -
free
注意到损坏的堆,程序立即死亡(无try
/catch
处理) -
free
对指向无效/未分配内存区域的指针进行操作,并且死于段错误,总线错误等。(同样,没有try
/catch
处理) - 指针指向不属于堆的已分配内存;行为就像#1或#2一样,具体取决于代码看起来如何“类似堆”。