【问题标题】:Changing gcc/g++ version causes segfault [closed]更改 gcc/g++ 版本会导致段错误 [关闭]
【发布时间】:2015-11-02 06:57:02
【问题描述】:

似乎将我使用的 gcc 版本从 gcc 4.7.3 更改为 gcc 4.9.2 会导致我的项目出现段错误(在干净的构建和运行之后)。

不幸的是,gdb 在我所在的服务器上坏了 出现此错误,暂时无法使用。 gcc 本身的任何已知变化都可能导致这种情况吗?我怀疑这个问题可能是由双重免费引起的。

【问题讨论】:

  • 你试过valgrind吗?
  • 很可能,您的代码中有一些 UB,就像猜测的那样,双重免费。不看代码几乎不可能下结论。
  • 总而言之,导致这种情况的差异将指针成员添加到类。指针已设置但从未使用。这似乎是一件很奇怪的事情,会导致段错误,所以我认为也许 gcc 正试图为在指针上调用 free 的对象生成一个析构函数。这可能吗?在 4.7 和 4.9 之间生成析构函数的方式是否发生了变化?

标签: c++ c c++11 gcc


【解决方案1】:

您应该尝试使用 valgrind。

Valgrind 是一个调试工具,只需要使用 -g 标志编译您的代码。这是发现程序分段错误或任何内存泄漏的最佳方法。

考虑在调试时使用 valgrind 选项(它位于 valgrind 报告的底部),例如泄漏检查(我现在无法运行 valgrind,所以我无法确切告诉你它是什么)。

但是每当我编译我的代码时,我都会使用 valgrind 来检查每一个可能的失败。甚至考虑将 VG 放在 Makefile 规则中以更简单。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多