在我输入程序的主要功能之前,我一直在努力解决分段错误,我使用GDB调试器进行了检查,这给了我以下消息:
Program received signal SIGSEGV, Segmentation fault.
std::operator<< <std::char_traits<char> > (__out=..., __s=<optimized out>) at /usr/include/c++/4.8/ostream:533
533 __out.setstate(ios_base::badbit);
如果我检查回溯:
#0 std::operator<< <std::char_traits<char> > (__out=..., __s=<optimized out>) at /usr/include/c++/4.8/ostream:533
从我能理解的情况来看,我的其中一个包含有问题,但我不知道在哪里以及为什么......看起来这个问题来自“&lt;&lt;”运算符,我不会在代码中的任何地方超载(尽管我会使其他运算符超载)。
我不太确定如何链接任何代码,因为程序很长,而且我无法编写一个较小的代码来重现这个问题。有没有办法找到问题的来源?
感谢您的帮助
修改
我只有一个静态初始化,它只是一个int const(= 128),并且没有我所知道的全局(我对C ++很新,所以我可能错过了一个,它们是如何声明的?) 。我在函数外面声明了一些变量,但它们都是原始类型,所以我不确定它是不是一个问题
这是GDB给出的调用堆栈(带信息框):
rip = 0x55555555ba31 in std::operator<< <std::char_traits<char> > (/usr/include/c++/4.8/ostream:533); saved rip = 0x1
source language c++.
Arglist at 0x7fffffffdd50, args: __out=..., __s=<optimized out>
Locals at 0x7fffffffdd50, Previous frame's sp is 0x7fffffffdd68
Saved registers:
rip at 0x7fffffffdd60
我不太确定如何读它..
编辑2
我从编译中排除了所有代码(我在Eclipse CDT上工作),只留下了这个文件:
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char ** argv) {
printf("Hello world\n");
return 1;
}
我仍然遇到分段错误,这次使用以下gdb消息:
Program received signal SIGSEGV, Segmentation fault.
0x00000000000005e6 in ?? ()
到底是怎么回事?这是编译器问题吗?