*** glibc detected *** ./a.out: free(): corrupted unsorted chunks: 0x00000000007646b0 ***
*** glibc detected *** ./a.out: malloc(): memory corruption: 0x00000000007635a0 ***

我收到上述错误。但是我确定释放后没有使用内存。为什么会出现上述错误?

最佳答案

所有堆都将某些类型的元数据存储在其内部。当您执行malloc或free时,堆通常会在堆上执行一些簿记功能。如果它检测到元数据中完全出乎意料的内容,则通常会崩溃。

正常的堆操作极不可能引起此类问题,因此您的程序很可能是引起这种情况的原因。由于您的程序可以访问该进程中的所有内存,包括堆元数据,因此您的程序可能不小心覆盖了一些元数据。

可能的原因是写入超出了已分配缓冲区的末尾。此写入很有可能被允许,并且极有可能破坏堆元数据。当堆检测到此错误时,您的程序通常将中止。

关于调用free()时损坏了未排序的块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25767566/

10-12 16:15
查看更多