corrupted double-linked list:0xb4a12bb8问题解决

程序的主要功能

进程的主要功能是定期轮训获取设备上所添加的下级设备的信息.最近突然发现在某些情况下会发生WEB获取到的下级设备信息一直不正确的问题.不过此问题也是偶尔发生的,也加上自己的盲目自信一直以为没啥问题就一直没关注此问题.今天测试找到了此问题的稳定复现条件,就详细记录下解决此bug的过程.

处理流程

bug复现后,使用strace去跟踪发现只要出现WEB获取下级设备信息不正确的情况下总是会出现问题:

在这里插入图片描述
也就是出现的死锁问题导致的WEB在获取下级设备的时候一直不能获取到正确的设备信息.
经过最终的定位,发现此问题是由于之前所创建一个用于记录获取下级设备信息失败的次数的全局数组越界导致的.大致的代码如下:

int g_supportChNum=32;
int g_chNum=64;
char *g_subDevInfoGetFailTime=NULL;
g_subDevInfoGetFailTime = (char *)malloc(sizeof(g_subDevInfoGetFailTime) *g_supportChNum);
.....
int i=0;
for(i=0;i<g_chNum;i++){
	if(0 != com_getSubDevInfo(i))
		g_subDevInfoGetFailTime[i]=1;//i=62的时候获取失败
}

由于之前的失误将g_subDevInfoGetFailTime分配为长度为32的数组了.但是此设备是一个支持64通道的设备.而出现下级设备获取失败的通道是在61通道.
这就出现了明明只分配了32字节的空间的g_subDevInfoGetFailTime,在出现获取失败的情况下却在操作g_subDevInfoGetFailTime[61]即第62个字节,就导致了内存越界的问题.进而出现了线程死锁.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值