在C ++中退出函数时,您可以考虑哪些可能的原因导致分段错误?我的意思是,我在C ++程序中有一个可重现的分段错误,当我调查使用GDB时说
Program received signal SIGSEGV, Segmentation fault.
FooBar (bla=...) at foo.cpp:59
59 }
其中指示的行包含我的函数的结束括号。
答案 0 :(得分:5)
很可能在堆栈上的某个缓冲区上有buffer overrun。这会覆盖返回地址,因此当您的代码尝试返回到上一个堆栈帧时,它会跳转到某个随机地址,这很可能不是非可执行地址,因此您会遇到分段错误。
但是,如果没有看到更多关于崩溃的代码或更多信息,就无法确切说明原因是什么。
答案 1 :(得分:5)
这可能有很多原因。在Valgrind下运行程序,很可能它会告诉你确切的原因,或者至少有助于调查和缩小问题范围。
答案 2 :(得分:1)
我的第一个猜测是类的析构函数释放了无效指针。
答案 3 :(得分:0)
在我的情况下,我的std :: thread没有正确连接。