MALLOC_CHECK

不得不说,在Linux的编程的下,我要走的路还有很长很长,前段时间遇到的这个问题则是最能说明该问题了。
一个后台服务进程,在启动时,一直停留在某个阶段,根本无法正常的开展业务,换句话说,进程其实没有启动成功,而换到另一个环境则没有这个问题。即没有coredump文件,也没有log可以看,只能利用GDB进行调试,可是发现只是提示了在malloc分配内存时出现了导致程序无法正常启动,可是具体是那一次的malloc分配导致的问题却无从下手。
而出现malloc问题的是在一个静态库里,开始怀疑是不是静态库编译的时候的c库与进程编译时连接的c库不一致,但在让二者在同一个环境下进行编译,问题依然出现。无奈,只能上网寻求帮助,毕竟你所遇到的98%的问题别人都遇到过。
在看了网上的资料后,有人提到了在Linux下提供的MALLOC_CHECK可以检测malloc和free的问题,先将这么配置的具体表示贴出来:

MALLOC_CHECK_=0, 和没设置一样,将忽略这些错误
MALLOC_CHECK_=1, 将打印一个错误告警
MALLOC_CHECK_=2, 程序将收到SIGABRT信号退出

在将环境该环境变量设为2后,在运行程序,程序段错误,出现coredump文件。而这也正是我想要,在对照代码后发现,因为free函数放错了地方,导致同一块内存释放了两次,而至于别的环境没出现这个问题,是因为其他的进程需要的配置文件是正确的,没到导致free两次,所以没出现。
在修改之后,问题的确得到了解决。而这整个问题的解决过程也验证了网上的那句话:Google+stackoverflow可以让一个程序员变成超级程序员,当然前提是,你要能破墙且英语马马虎虎。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值