在进入主

时间:2016-07-04 09:17:31

标签: c++

抱歉这个似乎经常被问到的问题,但我有点迷失......

在我输入程序的主要功能之前,我一直在努力解决分段错误,我使用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 ?? ()

到底是怎么回事?这是编译器问题吗?

0 个答案:

没有答案