【问题标题】:How To Determine Seg Fault?如何确定 Seg 故障?
【发布时间】:2012-12-29 17:19:42
【问题描述】:

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

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

当我在函数调用之前在 main 中添加一行时,它就是 cout

编辑:

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

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;

【问题讨论】:

  • 我们需要一些代码来解决,seg 错误可能由于多种原因而发生
  • 截断代码,直到你有大约 20 行。在此处发布。
  • 确保你做std::cout &lt;&lt; "Check" &lt;&lt; std::flush; 否则你不能保证得到任何输出。
  • 我不是通灵者,请帮忙提供一个小代码。
  • 您也可以尝试在valgrind 下运行您的代码。有一种可能是您在某个地方损坏了某些东西,然后以一种产生段错误的方式访问损坏的内存,例如取消引用垃圾作为指针。

标签: c++ graph segmentation-fault


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多