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

【内存越界定位】MALLOC_CHECK_ GNU C Library可以根据环境变量MALLOC_CHECK_来决定是否在运行时可检测程序中的内存问题。但是只能检测malloc和free的问题;即便是越界了,也只能等下一次去malloc或者free的时候才能发现。因此只适用于free和malloc的这种死机问题定位。 1、基础 MALLOC_CHECK_有三种设定,即: MALLOC_CHECK_=0, 和没设置一样,将忽略这些错误 MALLOC_CHECK_=1, 将打印一个错误告警 MALLOC_CHECK_=2, 程序将收到SIGAB. 阅读详情

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))

此函数通知malloc进行一致性检查。它可以检查出内存分配不匹配的情况。

enum mcheck_status mprobe (void *pointer)

可显式地调用它来对指针进行一致性检查。以下是可能的返回值即可能发生的错误。mcheck_status有以下枚举值:

MCHECK_DISABLED:禁止mcheck,不做检查。

MCHECK_OK:没有发现内存问题。

MCHECK_HEAD:数组或指针下溢出。

MCHECK_TAIL:数组或指针上溢出。

MCHECK_FREE:空间 已经被释放。

查看glibc/malloc中的代码可以发现以上函数正是通过memrecorder类似的机制实现的。此机制可通过以下方法来启动:

(1)在main()函数开始时或适当位置显式地调用mcheck()函数。

(2)加-lmcheck重新连接可执行程序。

(3)Glibc还指出另一种启动这种检查机制的方法:即设置环境变量MALLOC_CHECK_的值。

若将MALLOC_CHECK_设置为0,则在检查到错误时不作任何提示。

若将MALLOC_CHECK_设置为1,则在检查到错误时打印一条信息到标准错误输出。

若将MALLOC_CHECK_设置为2,则在检查到错误时直接调用abort()中止程序。

[root@localhost root]# cat MALLOC_CHECK_Example.c //源代码内容,存储内存管理问题
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *ptr1;
char *ptr2;
ptr1 = malloc(512);
ptr2 = malloc(512);
ptr2 = ptr1;
printf("ok\n");
free(ptr2);
free(ptr1);
printf("really ok?\n");
}

以下是加上-lmcheck编译并运行的情况。

[root@localhost ~]# gcc -o MALLOC_CHECK_Example MALLOC_CHECK_Example.c -lmcheck
[root@localhost ~]# ./ MALLOC_CHECK //运行
ok
memory clobbered before allocated block
Aborted
[root@localhost root]# gcc -o MALLOC_CHECK_Example MALLOC_CHECK_Example.c
[root@localhost root]# MALLOC_CHECK_=0 ./MALLOC_CHECK_Example //设置宏值为0
ok
really ok?
[root@localhost root]# MALLOC_CHECK_=1 ./MALLOC_CHECK_Example //设置宏值为1
malloc: using debugging hooks
ok
free(): invalid pointer 0x8049628!
really ok?
[root@localhost root]# MALLOC_CHECK_=2 ./MALLOC_CHECK_Example //设置宏值为2

glibc: mcheck;MALLOC_CHECK_ abortfn,这个参数是一个回调函数,当真的检查到异常时调用的一个函数。如果这个参数传入null指针,mcheck就会使用默认的函数,这个默认的函数会打印一个消息,并且调用abort函数,来终止。当这个函数被回调的时候,会带有一个参数,这个参数代表着有什么异常点被发现。使用-lmcheck选项来链接程序,是最简单的方式,来尽早使用mcheck。可以通过使用mcheck函数,要求malloc检查动态内存的一致性。这个函数是GNU扩展的一个函数,在mcheck.h头文件声明。 阅读详情

相关推荐

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战

本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。

q6r7s8t9的博客 1135

MALLOC_CHECK

MALLOC_CHECK环境变量

wuguanbao的博客 4531

编程语言的未来走向:趋势、挑战与机遇

同时,鼓励他们接触和掌握一些专业领域的开发工具和技术框架,比如Web开发中的JavaScript、React.js,数据分析的Python(Pandas, NumPy, Matplotlib等),以及人工智能和机器学习领域的TensorFlow、PyTorch等。当前,全球范围内正积极推动编程教育的普及化,从儿童启蒙阶段到高等教育阶段,乃至终身学习的过程中,如何优化编程语言的教学方法、提高教学质量,并将其广泛应用于不同领域,是教育者与政策制定者面临的重大课题。未来,编程语言的多样化和包容性将会继续加强。

zrc_xiaoguo的博客 1829

linux调试工具glibc的演示分析

<br /> 一)MALLOC_CHECK_GNU的标准库(glibc)可以通过内置的调试特性对动态内存进行调试,它就是MALLOC_CHECK_环境变量,它在默认情况下是不设定的,在老的版本默认这个值为0,新的版本默认值为2,但有一个矛盾,如果设为2,它将会打印出长长的跟踪信息,这比设为2更详细.MALLOC_CHECK_有三种设定,即:MALLOC_CHECK_=0 ----- 关闭所有检查.MALLOC_CHECK_=1 ----- 当有错误被探测到时,在标准错误输出(stderr)上打印错误信息.M

ubuntulover的专栏 2040

QT实现HTTP文件(夹)下载的完整流程与实战技巧

本文详细介绍了使用QT框架实现HTTP文件和文件夹下载的完整流程与实战技巧。通过QNetworkAccessManager等核心类,讲解了从单文件下载、大文件处理、进度显示、暂停/取消功能,到复杂的文件夹下载策略。文章重点剖析了断点续传、错误处理与网络健壮性等关键问题,为C++桌面应用集成稳定高效的下载功能提供了专业指导。

weixin_29239279的博客 279

千兆以太网PHY设计:PCB原理图完整示例

深入解析千兆以太网PHY电路设计要点,提供完整的PCB原理图设计实例,帮助工程师掌握高速信号布局与电源去耦等关键技术,提升设计稳定性与信号完整性。

weixin_30633869的博客 631

glibc提供的malloc()的调试工具

关键词:MALLOC_CHECK_、mtrace()、muntrace()、MALLOC_TRACE、mprobe()、-lmcheck等等。 1. MALLOC_CHECK_环境变量 MALLOC_CHECK_提供了类似于mcheck()和mprobe()函数的功能,但是无需对程序进行修改和重新编译。 设置不同整数值可以控制程序对内存分配错误的响应方式。 0 - 不产生错误信息,也...

weixin_30687811的博客 847

Simscape Multiboby学习笔记1——跟着官网学Multibody

文章目录一. 引言二. Simscape Multibody自学之路三. 本教程的目录 一. 引言 最近在倒腾Matlab的动力学仿真,起因是看到有人推荐Matlab的multbody模块,一经了解之下简直惊为天人。作为一名Matlab的小粉,看到这么好用的模块简直不要太开心,之前用simulink搭飞行器的仿真模型,虽然能够仿真看到六自由度位移,毕竟不能可视化,还是很不够直观,而且simulink仿真(以及更费力的脚本文件仿真)需要精确建模,模型不精确计算也是天差地别。而Multibody在具备其他动力学

qq_30267617的博客 8241

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

glibc detected *** double free 错误解决方法 定位问题:*** glibc detected *** : double free or corruption (!prev): 0x09b077d8 Q: 在执行一个程序时,出现如下错误: *** glibc detected *** double free or corruption: 0x0937d008 *** 是...

爱自在的专栏 3186

UE5Could not be compiled. Try rebuilding from source manually.

UE5Could not be compiled. Try rebuilding from source manually.

weixin_45417260的博客 2770

从QEvent到系统响应:EC如何成为硬件事件的隐形信使

本文深入解析嵌入式控制器(EC)如何作为硬件事件的隐形信使,通过QEvent机制将按键、合盖等物理事件转换为SCI信号,并经由ACPI架构触发操作系统响应。EC与BIOS紧密协作,实现了从底层硬件到系统层面的高效事件传递,是嵌入式开发和系统优化的关键技术。

yellow的专栏 651

*** glibc detected *** double free or corruption (fasttop)

在执行一个程序时,出现如下错误:  *** glibc detected *** double free or corruption(fasttop):***   解决方法:   1.该错误的意思是:对一个地址先后进行两次free()操作就会引起这种错误代码,如果是自己编写的代码,就仔细地检查一下代码;   g_free(p=g_malloc(sizeof(i

xinanzhung的专栏 1998

Python爬虫抓取学术期刊数据(Springer、Elsevier)

本文详细介绍了如何使用Python爬虫抓取学术期刊网站(如Springer、Elsevier)上的文章信息,并进行数据清洗和存储。我们使用了requestsSeleniumpandas等技术,通过模拟浏览器行为来绕过反爬虫机制,并将数据保存为Excel文件,方便后续分析。未来,我们可以通过加入更多的期刊网站数据源,扩展爬虫的功能,抓取更多的学术数据。同时,结合自然语言处理(NLP)技术,可以对抓取的文章进行自动化的摘要提取和主题分类,为学术研究提供更多的支持。

2201_76125261的博客 1487

*** glibc detected *** ./client: double free or corruption (!prev): 0x09385098 ***

*** glibc detected *** ./test: free(): invalid pointer: 0x085d700b ***

summersunboy的专栏 3536

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

*** glibc detected *** xxx: double free or corruption (out): 0x000e1928 ***

今天在调试程序的时候遇到一个报错,然后进程就挂掉了,报错信息如下:      *** glibc detected *** xxx: double free or corruption (out): 0x000e1928 ***     xxx就是挂掉的进程。 先把代码贴上来: int file_info_list_create(void) { struct dirent *p

好久都没有更新博客喽,工作原因只能总结在内部机上:-( 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

glibc detected *** double free or corruption (out): 0x0000000000515d20

#[reporter]debugin@playmp3_by_list!#[reporter]reporter_event_pth ##cmd_data.my_msg_type=1!#[reporter]RUN_INFO: START station 6*** glibc detected *** double free or corruption (out): 0x0000000000515d...

weixin_34038293的博客 235

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

double free or corruption的原因(2)

先来段代码:  01 #include 02 #include 03   04 #define DEBUG() printf("lines: %d\n", __LINE__); fflush(stdout);

xinanzhung的专栏 5315

python glibc detected *** python: double free or corruption

今天在用python访问postgresql数据库时,报错。错误信息如下 *** glibc detected *** python: double free or corruption (!prev): 0x00000000011c8ec0 *** ======= Backtrace: ========= /lib/libc.so.6(+0x775b6)[0x7f6987a335b6]...

xiaohong020408的博客 679

*** glibc detected *** ./IrayGui: double free or corruption (!prev): 0x003e47f8 ***

*** glibc detected *** ./IrayGui: double free or corruption (!prev): 0x003e47f8 *** 00128000-0012c000 rwxp 00118000 b3:02 31097      /home/root/myGui 0012c000-004a3000 rwxp 00000000 00:00 0

hqyhqyhq的专栏 1675

.glibc detected ERROR

红帽企业 Linux 4 *** glibc detected *** double freeQ: 在执行一个程序时,出现如下错误: <br />*** glibc detected *** double free or corruption: 0x0937d008 *** <br />是怎么回事?  <br /><br />A:  设置MALLOC_CHECK_环境变量再运行程序,呵呵,错误信息消失 <br />MALLOC_CHECK_=0  ./myprogram <br /><br />红帽企业 L

技术交流 1015

double free or corruption (!prev): 0x080644c8 ***

写了一个多线程的代码,在主线程中申请了一块内存,在另一个线程中释放内存,老出错误,不知道是怎么回事。 *** glibc detected *** /home/ydx/vehicle-program/vehicle-v1.0/t: double free or corruption (!prev): 0x080644c8 ***======= Backtrace: =========/lib/l...

weixin_34082789的博客 468

c语言malloc定义报错core,C语言,realloc动态内存申请,出现报错double free or corruption (!prev)...

程序大概如下:#include#include#include#include#include#define MALLOC(num,type) (type*)alloc((num)*sizeof(type))#define REALLOC(ptr,num,type) (type*)re_alloc(ptr,(num)*sizeof(type))double *x;int count =0;void...

weixin_39867594的博客 457
上一篇: /proc/meminfo信息介绍
下一篇: linux重启网络、时间同步、nfs服务等
lb015331
博客等级 码龄19年 22粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值