当我结束我的程序时,我发现像这样的“检测到 glibc”消息。但是,我不知道这是错误或警告,否则..有人可以解释这条消息的含义以及我该怎么做吗?
问问题
8159 次
3 回答
8
这意味着您的程序中有堆损坏。您可能使用 分配了一些内存malloc
,但在实际范围之外写入,从而破坏了堆。当您调用 时free
,glibc 检测到损坏并报告它(具体来说,下一个空闲块的大小被覆盖)。
你绝对应该解决这个问题。 Valgrind可以在跟踪实际导致堆损坏的代码方面提供巨大帮助。
于 2012-06-02T18:53:02.700 回答
4
您已经破坏了程序中某处的堆。您可能已经使用realloc
和编写了外部内存malloc
。但是当你试图释放内存时,malloced
内存被释放了,但是你写的越界内存也没有,这导致你得到的损坏错误。有一些工具,例如:Debugging for Windows以及electricfence、dmalloc、valgrind。此外,您可能需要检查循环,因为它可能是简单的while loop
或for loop
由于未正确检查循环中的边界或限制而导致错误。
于 2012-06-02T19:08:45.183 回答
3
你破坏了堆,所以你在内存管理的某个地方犯了一个错误;使用Valgrind之类的工具来查找和修复此类错误。
于 2012-06-02T18:55:09.240 回答