【发布时间】:2012-06-07 13:25:56
【问题描述】:
当我结束我的程序时,我发现像这样的“检测到 glibc”消息。 但是,我不知道这是错误还是警告,或者……有人可以解释一下这条消息的含义以及我该怎么做吗?
【问题讨论】:
-
你能发布你的代码吗?这会有所帮助..
-
错误不是“检测到 glibc”,而是该消息后面的内容。让我们看一些代码。 (哦,对于未来:图片并不是真正适合传达文本信息的方式)。
当我结束我的程序时,我发现像这样的“检测到 glibc”消息。 但是,我不知道这是错误还是警告,或者……有人可以解释一下这条消息的含义以及我该怎么做吗?
【问题讨论】:
这意味着您的程序中有堆损坏。您可能使用malloc 分配了一些内存,但写入超出了实际范围,从而破坏了堆。当你调用free 时,glibc 会检测到损坏并报告它(具体来说,下一个空闲块的大小会被覆盖)。
你绝对应该解决这个问题。 Valgrind 可以极大地帮助追踪实际导致堆损坏的代码。
【讨论】:
您在程序中的某处损坏了堆。您可能已经使用realloc 和malloc 编写了外部内存。但是当你试图释放内存时,malloced 内存被释放了,但是你写的内存也没有,这导致你得到的损坏错误。有一些工具,例如:Debugging for Windows 以及 electricfence、dmalloc、valgrind。此外,您可能需要检查循环,因为简单的while loop 或for loop 可能由于未正确检查循环中的边界或限制而导致错误。
【讨论】:
你破坏了堆,所以你在内存管理方面犯了一个错误;使用Valgrind 之类的工具来查找和修复此类错误。
【讨论】: