-5

当我结束我的程序时,我发现像这样的“检测到 glibc”消息。但是,我不知道这是错误或警告,否则..有人可以解释这条消息的含义以及我该怎么做吗?

在此处输入图像描述

4

3 回答 3

8

这意味着您的程序中有堆损坏。您可能使用 分配了一些内存malloc,但在实际范围之外写入,从而破坏了堆。当您调用 时free,glibc 检测到损坏并报告它(具体来说,下一个空闲块的大小被覆盖)。

你绝对应该解决这个问题。 Valgrind可以在跟踪实际导致堆损坏的代码方面提供巨大帮助。

于 2012-06-02T18:53:02.700 回答
4

您已经破坏了程序中某处的堆。您可能已经使用realloc和编写了外部内存malloc。但是当你试图释放内存时,malloced内存被释放了,但是你写的越界内存也没有,这导致你得到的损坏错误。有一些工具,例如:Debugging for Windows以及electricfencedmallocvalgrind。此外,您可能需要检查循环,因为它可能是简单的while loopfor loop由于未正确检查循环中的边界或限制而导致错误。

于 2012-06-02T19:08:45.183 回答
3

你破坏了堆,所以你在内存管理的某个地方犯了一个错误;使用Valgrind之类的工具来查找和修复此类错误。

于 2012-06-02T18:55:09.240 回答