【发布时间】: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