【问题标题】:Detect source of error "glibc detected memory corruption"检测错误源“glibc 检测到内存损坏”
【发布时间】:2015-12-19 18:35:27
【问题描述】:

从项目中添加新功能后,我得到“glibc 检测到内存损坏”

错误未指定发生错误的行。

如何检测错误来源?

更新:

另外值得一提的是,我没有在我的代码中明确使用 malloc,我的代码是 C++。

【问题讨论】:

  • valgrind 通常是一个不错的起点。
  • 你可以使用 valgrind 和 memcheck 工具来检查你的内存。
  • 错误“发生”的行对于确定错误的来源(原因)几乎没有用处。您添加的新功能不太可能包含错误的原因(除非您将其添加到以前经过很好测试的项目中)。这种错误可以隐藏很长时间(通过执行时间和/或代码版本),并且症状与原因相去甚远。 R_Kapp 已经给出了通常的建议(Valgrind)。我只是想帮助您了解为什么更直接地查看故障无助于找到原因。
  • 另一个有用的工具是环境变量MALLOC_CHECK_,即MALLOC_CHECK_=2 ./yourprog。有时这会在正常执行之前发现内存错误并中止程序(生成一个核心转储,然后您可以使用调试器检查该转储)。

标签: c++ linux memory malloc glibc


【解决方案1】:

如果你使用g++clang你应该启用AddressSanitizer,它擅长检测这种错误。使用-fsanitize=address 编译并链接您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 2012-02-05
    相关资源
    最近更新 更多