如何判断segg故障

How To Determine Seg Fault?

本文关键字:segg 故障 判断 何判断      更新时间:2023-10-16

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

程序收到信号SIGSEGV,分段错误。0x00007ffff758a02c in free () from/lib/x86_64-linux-gnu/lib .so.6

当我在函数调用前的main中添加一行时,这只是简单的cout <<"检查";我仍然得到一个分割错误,但检查不出现在输出中。我真的迷路了。接下来我应该尝试什么?

编辑:

谢谢你使用flush的帮助。我在代码中找到了导致隔离故障的区域。我使用的函数对我来说是新的,所以我仍然有点迷路。有人看到bug了吗?

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;

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

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