malloc申请注意事项

现象:使用DMA接收数据时接收数据不完整导致后面的数据无法正常解析陷入死循环或者直接进入断言

原因:

实际并非接收数据不完整,空间内有脏数据没有清空

1.进入断言原因:多条数据的解析以\r\n为结尾,断言中有对指针为空的判断以及指针指向空间为空的判断,数据不完整的表现为指针指向空间为空,因为指针为char*,但是数据缺失结束符'\0'

2.实际上数据并非不完整,而是设计中在每一次接收都可能会有接收缓存区的地址以及大小的改变,重新申请堆上的空间时没有memset所以堆上的空间有一些乱七八糟的数据

陷入死循环原因:在没有加入断言之前,处理多条数据以\r\n作为结尾,如果没找到\r\n返回-1,然后指针移到未处理的位置,如果数据缺失的情况下会一直进入循环然后指针前移。

解决方案:

1.在每一次重新申请时加上memset

2.同时获取长度函数如果找不到直接返回整个长度而不是返回-1,直接强制跳过有问题的部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值