全局变量被未知原因改变的解决方法

在开发的过程中总会碰到一些奇怪的问题,仿真的时候一看,发现是某个全局变量被莫名其妙改变了,导致整个函数判断都出了问题。
全局变量可能会被改变的原因有以下几点:

1.自己改的(废话~):好好查看这个变量被谁调用了

2.全局变量字节未对齐:
有一次调试的时候发现一个变量定义成局部变量就能正常运行,而定义成全局变量就不能运行了。局部变量能运行说明我程序的逻辑是没问题的,找原因的时候一看是我全局变量经常会莫名其妙被改变。找了一圈发现这个变量根本没被其他函数使用。
后面通过仿真,得到该变量的地址(假设为0x1002)。地址除以4之后发现不是一个整数,这才发现是这个变量字节未4字节对齐导致的。至于为什么不对齐,我也不知道!
解决方法:使用 attribute((aligned(4))) 修饰,使其4字节对齐,就完美解决了。

3.指针未初始化:
假如你定义的变量是指针类型的话,没有给他初始化则会导致该指针是个野指针,里面的值是不确定的。

总之开发的过程中,少用全局变量,要用的话尽量用结构体,做好分层,提高代码的可阅读性和移植性。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值