网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Linux中bug的解决方法

Linux中bug的解决方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了屯昌免费建站欢迎大家使用!

最近调试过程中遇到了一个问题,现象是在没有GPS信号的情况下,程序每次跑几分钟后就会出现以下错误提示信息,导致程序中断退出:

double free or corruption (out)

Aborted (core dumped)
此问题折腾了我大概两小时,在此做个总结。
刚开始我检查代码,是否有double free 的地方,发现并没有。后来,我在代码里加了malloc是否成功的判断以及free后指针赋NULL的语句,依然是同样的问题。
再后来我把log打开看,看的过程中突然发现一个现象,就是每次程序挂掉时,串口读到的数据长度都是450字节,再仔细看,其实是读了两串数据,即两条GNRMC及其他语句。
buff len:450;$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,1,1,00*79
$GLGSV,1,1,00*65
$GNGLL,,,,,,V,N*7A
$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,1,1,00*79
$GLGSV,1,1,00*65
$GNGLL,,,,,,V,N*7A
double free or corruption (out)

Aborted (core dumped)

正常情况下,读到都是如下信息,即只有一条GNRMC语句。

buff len:225;$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0,00,99.99,,,,,,*56
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,1,1,00*79
$GLGSV,1,1,00*65

$GNGLL,,,,,,V,N*7A

有了这个线索就好找问题了,  问题出在下面这个函数malloc分配空间时那个多加的数字100上,

int gps_analyse(char *buff,int buff_len,GNSS *gps_data)

{

    ……

    char *tmpbuf;

    tmpbuf = (char *)malloc(strlen(ptr)+100);

    memset(tmpbuf, 0, strlen(ptr)+100);

    memcpy(tmpbuf, ptr, strlen(ptr));

    while (strstr(tmpbuf, ",,"))

        strrpl(tmpbuf, ",,", ",@,");

   ……

这个100本意是用来将,,替换成,@,时用的,对于上面那种特殊状态,总共有114个连续,,,所以空间分配不足,导致出现问题。
解决方法也很简单,只要把100加大些就可以。  这个问题,带给我以下几点启发:
1)malloc分配空间时大小一定要注意
2)测试时要覆盖各种可能的情况,不能只考虑正常状态,之前我就只测了有GPS信号时的状态;

3)测试时时间要足够长。

关于Linux中bug的解决方法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


分享文章:Linux中bug的解决方法
文章转载:http://bjjierui.cn/article/jgdoop.html

其他资讯