分段错误会导致程序挂起吗

Can a segmentation fault cause a program to hang?

本文关键字:程序 挂起 错误 误会 分段      更新时间:2023-10-16

我认为分段错误只会导致崩溃。但是当我运行我的c++程序(在带有mingw编译器的windows上)时,它挂起了。但当我在gdb中运行它时,它会显示分段错误。

这应该比解决相反的问题容易得多:如果它在没有调试器的情况下出现故障,但在有调试器时挂起,那么调试起来可能很棘手。调试器中的任何seg错误都为您提供了一种非常简单的方法(在seg错误后获得回溯)来获得seg错误的直接原因,这通常(但并不总是)直接指示错误。

对于你的标题问题,在你发现seg错误的原因后,你可能会发现具体的情况。但从理论上讲,这是可能的,但不太可能:在某些环境中,一些segfault可以通过try/catch捕获,并且您的代码可以结构化,因此捕获这样的错误会使程序处于无限循环中。更可能的是,导致调试器中seg错误的同一个错误会导致调试器外部的挂起。调试器很可能在稍微不同的虚拟地址加载程序、程序堆栈和/或程序命令行参数。一些随机内存阻塞器可能会为一个加载位置触发挂起,而为另一个位置触发seg故障。或者,一些调试器有意修改未初始化的内存,因此使用未初始化的指针更有可能出错,因为它可能会在没有调试器干扰的情况下导致其他行为(包括挂起)。