如何确定段错误?

时间:2012-12-29 17:19:42

标签: c++ graph segmentation-fault

我有一个有趣的分段错误。它发生在我的代码中的未知位置。代码相当简单,有两个对象和一个通用函数。该函数应该创建对象的图形。当我只用一个main调用该函数运行代码时,我在GDB中得到一个seg错误和以下代码行。

  

编程接收信号SIGSEGV,分段故障。   来自/lib/x86_64-linux-gnu/libc.so.6的free()中的0x00007ffff758a02c

当我在函数调用之前在主右边添加一行,它只是cout<< “校验”;我仍然遇到分段错误,但检查没有出现在输出中。真的迷失在这里。我接下来应该尝试什么?

编辑:

感谢您使用flush的帮助。我发现代码中导致seg错误的区域。我正在使用的功能对我来说是新的,所以我仍然有点失落。有人看到了错误吗?

const char* inFile = inFileP.c_str();
list<CContinent> world;
CCountry *homeCountry = new CCountry;
CCountry *neighborCountry = new  CCountry;

fstream filestr; 
filestr.open(inFile, fstream::in | fstream::out | fstream::app);
string line;

2 个答案:

答案 0 :(得分:0)

从痛苦的经历来看,当malloc或free发生崩溃时,这是因为堆损坏。任何通常的嫌疑人都可能导致堆损坏 - 分配10个字节,写入11个 - 免费,然后写入free'd内存,双重释放,et.al。

答案 1 :(得分:0)

Valgrind是一个用于调试程序的有用工具。 在第一个视图中,我没有看到世界变量的初始化。