变量初始化的疑惑


前天写了一个函数,是用来打包一组数据通过串口发送出去。当时考虑到要打包各种定义的结构类型,所以函数的参数是一个空类型。之后在回调函数中实现他们各自的打包以及最后打包成一组数据帧发送出去。在一开始写的时候,顺手在这个函数中写了一个将空类型转换为一种已经定义的结构(这个因该是在回调函数中实现,在这里属于笔误)。


同时在这个函数中也定义了几个不同类型的结构变量。其中一个参数较多,参数主要由此函数中调用的一个子函数负责填写。而且它是比较重要的一个参数。当时并没有对其进行初始化,也没有考虑子函数是否对其进行全部的变量进行赋值。就没有再去考虑。


一开始测试时,没有错误而且现象很正确,没有仔细再去查看,是否还有bug。


结果今天早上在阅读代码时,发现了那个在函数中没有用到的强制类型转换(在定义变量时直接强制转换),于是顺手将这条定义语句删掉了。


接下来,奇迹发生了。


再测试时,数据出错了。而且错的莫名其妙。根本不是自己需要的数据,一点都不符合帧数据的帧格式。在打印了所有的变量后,发现就是在最后一步,将那个较多变量的B结构,整合为一个数据帧时,出错了。再查看最后一个子函数,发现有一句memcpy(),中用到了B结构中的一个长度变量。结果这个B的长度变量在对其进行赋值的函数中没有被赋值,一般默认为0.但是并没有对其惊醒过初始化,言外之意就是没有初始化,它的数据未知。

在将B结构在定义时调用memset()将其初始化为零。这样再调试时,一切正常。

 

由此,留下来一个疑问,为什么强制类型转换语句在的时候,它的值会默认为零,而删除了就成了随机数,这里边的原因是什么?


这里需要试着看汇编找答案了吧。(运行平台ARM9)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值