调用free()时损坏的未分类块

时间:2014-09-10 14:07:03

标签: c

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

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

2 个答案:

答案 0 :(得分:17)

所有堆积,将某些类型的元数据存储在自身内部。当你执行malloc或free时,堆通常会在堆上执行一些簿记功能。如果它在元数据中检测到完全意外的事情,它通常会崩溃。

正常堆操作极不可能导致此类问题,因此您的程序最有可能是原因。由于您的程序可以访问进程中的所有内存,包括堆元数据,因此您的程序可能会意外覆盖某些元数据。

可能的原因是写入超出分配缓冲区的末尾。这种写入很可能是允许的,并且极有可能破坏堆元数据。当堆检测到这种情况时,您的程序通常会中止。

答案 1 :(得分:4)

可能是你试图用一个没有正确指向动态分配内存的指针释放。