当我结束我的程序时,我发现了'glibc detected'这样的消息。 但是,我不知道这是错误还是警告,否则..有人可以解释一下这条消息的含义以及我该怎么办?
答案 0 :(得分:8)
这意味着您的程序中存在堆损坏。您可能使用malloc
分配一些内存,但写入实际边界之外,破坏堆。当你调用free
时,glibc会检测到损坏并报告它(具体来说,下一个空闲块的大小会被覆盖)。
你一定要解决这个问题。 Valgrind可以帮助您追踪实际导致堆损坏的代码。
答案 1 :(得分:4)
你的程序中的某个地方已经损坏了堆。您可能使用realloc
和malloc
编写了外部记忆。但是当你试图释放内存时,malloced
内存被释放了,但你写的超出范围的内存也没有,这会导致你得到的损坏错误。有一些工具,例如:Debugging for Windows以及electricfence,dmalloc,valgrind。此外,您可能希望检查循环,因为可能是简单的while loop
或for loop
导致错误,因为没有在循环中正确检查边界或限制。
答案 2 :(得分:3)
你破坏了堆,所以你在内存管理方面犯了一个错误;使用Valgrind之类的工具来查找并修复此类错误。