【发布时间】:2011-09-29 09:17:46
【问题描述】:
如果发生堆损坏,new 可以抛出吗?
如果我理解正确的话,在堆损坏的情况下,所有的赌注都没有了,任何事情都可能发生。这是正确的吗?
【问题讨论】:
-
这是操作系统特定的问题吗?如果是,我会编辑问题
-
如果是未定义的行为,任何事情都可能发生。它可以启动nethack。或者它可以抛出异常。不过,程序员不应该在他们的程序中依赖这种行为。最坏的情况是在你需要将它移植到另一个以不同方式实现 UB 的编译器/平台之前找不到错误。
-
FWIW,由于堆损坏,我看到了新的失败。当然,这并不意味着它总是会,但它可以。 (它实际上会做什么取决于堆的实现方式、堆的哪些部分被损坏以及如何损坏)
-
@Tony:你应该把它作为答案:)
-
@tp1:我希望看到一个启动一个专门编写的 nethack 版本的实现,这样游戏的播放方式将为未定义的行为提供定义。对于导致程序执行剩余部分的未定义行为的任何原因,它都是一致的,并且可以选择保留它以供将来执行程序。
标签: c++ heap-corruption