功能退出时分段错误的可能原因

时间:2011-08-08 19:19:56

标签: c++ debugging gdb segmentation-fault

在C ++中退出函数时,您可以考虑哪些可能的原因导致分段错误?我的意思是,我在C ++程序中有一个可重现的分段错误,当我调查使用GDB时说

 Program received signal SIGSEGV, Segmentation fault.
 FooBar (bla=...) at foo.cpp:59
 59     }

其中指示的行包含我的函数的结束括号。

4 个答案:

答案 0 :(得分:5)

很可能在堆栈上的某个缓冲区上有buffer overrun。这会覆盖返回地址,因此当您的代码尝试返回到上一个堆栈帧时,它会跳转到某个随机地址,这很可能不是非可执行地址,因此您会遇到分段错误。

但是,如果没有看到更多关于崩溃的代码或更多信息,就无法确切说明原因是什么。

答案 1 :(得分:5)

这可能有很多原因。在Valgrind下运行程序,很可能它会告诉你确切的原因,或者至少有助于调查和缩小问题范围。

答案 2 :(得分:1)

我的第一个猜测是类的析构函数释放了无效指针。

答案 3 :(得分:0)

在我的情况下,我的std :: thread没有正确连接。