* glibc detected ./load: double free or corruption (!prev): ADDRESS **

当使用glibc时,它怎么知道我是双重自由的呢?它能记录下我所做的一切吗它是否包含在元数据中,比如how free知道要释放多少空间(How does free know how much to free?

最佳答案

对于每个分配,内存管理器都保留一些“头”(最有可能是树节点或链接列表)当您传递给free时,它不包含有效的头-好吧,它不能正确地被释放至于这个信息保存在哪里——这取决于实现,但通常它放在您从malloc获得的地址之前——然而,大小和结构很可能是未知的,但至少它提供了这样一个概念:这个头有多容易被破坏/损坏/覆盖等。

关于c - 如何在glibc中检测到两次释放?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18590786/

10-13 08:27