1

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

程序收到信号 SIGSEGV,分段错误。来自/lib/x86_64-linux-gnu/libc.so.6的free()中的0x00007ffff758a02c

当我在函数调用之前的主要内容中添加一行时,它就是 cout << "Check"; 我仍然遇到分段错误,但检查没有出现在输出中。在这里真的迷路了。接下来我应该尝试什么?

编辑:

感谢您对使用冲洗的帮助。我在代码中找到了导致段错误的区域。我正在使用的功能对我来说是新的,所以我还是有点迷茫。有人看到错误吗?

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;
4

2 回答 2

0

从痛苦的经验来看,当 malloc 或 free 发生崩溃时,这是因为堆损坏。任何常见的嫌疑人都可能导致堆损坏 - 分配 10 个字节,写入 11 个 - 空闲,然后写入空闲内存,双重释放,等等。

于 2012-12-29T18:22:43.880 回答
0

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

于 2012-12-29T21:53:31.713 回答