繁体   English   中英

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

[英]Can a segmentation fault cause a program to hang?

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

解决这个问题要比反之容易得多:如果在没有调试器的情况下出现段错误,但挂在调试器上,则调试起来会很棘手。 用调试器进行seg错误的任何操作都为您提供了一种非常简单的方法(在seg错误之后进行回溯),以获取seg错误的直接原因,该原因通常(但并非总是)直接指示该错误。

对于标题问题,在发现段故障的原因后,您可能会发现具体情况。 但是从理论上讲,这是可能的,但不太可能:在某些环境中,某些段错误可能会被try / catch捕获,并且您的代码也可能被结构化,因此捕获此类错误会使程序陷入无限循环。 在调试器中导致seg错误的同一bug更有可能导致调试器外部挂起。 调试器可能会在略有不同的虚拟地址处加载程序,程序堆栈和/或命令行参数。 一些随机的内存破坏程序可能会导致一个加载位置挂起,并导致另一个加载位置发生段故障。 或者,某些调试器有意修改未初始化的内存,因此,当未初始化的指针可能引起其他行为(包括挂起)而不受调试器的干扰时,使用未初始化的指针更有可能造成段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM