打印

glibc detected *** double free 错误解决方法

[复制链接]
195|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小小的人呀|  楼主 | 2018-9-29 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Q: 在执行一个程序时,出现如下错误:

*** glibc detected *** double free or corruption: 0x0937d008 ***

是怎么回事?  

A:   设置MALLOC_CHECK_环境变量再运行程序,呵呵,错误信息消失



MALLOC_CHECK_=0   ./myprogram



红 帽企业 Linux 4 提供的 glibc 可以执行附加的内部数据健全检查,从而在尽可能早的时候发现和保护数据被破坏。在默认的情况下,当被破坏的数据被发现时,与以下相似的错误信息会被显示在标准的错误输出上(如果 stderr 没有打开,会被记录在 syslog 中):



*** glibc detected *** double free or corruption: 0x0937d008 ***



在默认的情况下,产生这个错误的程序也会被中止。但是,这(以及是否产生错误信息)可以通过环境变量 MALLOC_CHECK_ 来控制。以下的设置是被支持的:



0 - 不产生错误信息,也不中止这个程序



1 - 产生错误信息,但是不中止这个程序



2 - 不产生错误信息,但是中止这个程序



3 - 产生错误信息,并中止这个程序



备注

如果 MALLOC_CHECK_ 被设置为除 0 以外的值,这会使 glibc 进行更多的检查并可能影响到系统的性能。

3.3 常用Linux内存管理及调试工具

在Linux下,除了Gdb,还有很多调试工具,例如Binutil系列工具、Glibc提供的内存检测工具、MemWatch内存错误检测工具以及valgrind工具。它们都各有所长,侧重方面有所不同。本节介绍几种常用的调试工具。

3.3.1 mcheck函数

mcheck是Glibc提供函数,声明如下:



int mcheck (void (*abortfn) (enum mcheck_status status))

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

399

主题

399

帖子

0

粉丝