为全局变量赋值_程序跑飞之全局变量谜之更改

最近在一次调试智能车的过程中,发现我的程序在某一些情况下总会出现一些莫名的不识别赛道的情况。于是利用屏幕将相关的参数进行显示。这时候有意思的事情就来,有一个标志位我只对其进行过0或是1的赋值,但是屏幕上却显示出了一个明晃晃的141,于是我就认为肯定是屏幕出错了,于是我用IAR的在线调试,观察这个全局变量,果不其然,这个标志位还是在随机的跳动。

对于我这样的新手,发现这个问题的时候,那反应肯定是一脸懵逼。于是我就又定义了一个全局变量并赋值为1。再利用IAR在线观察,果真它还是变了 。超出能力范围,我选择放弃 ,那怎么可能。于是我去问了度娘,度娘里面大部分的回答是栈溢出。

当然栈溢出的可能也是有好多的。

1、内存泄露,比如某一数组原先已定义好大小,但是在后续操作中存放的个数超出这一既定长度,会导致堆栈溢出,就是数组越界

2、由于动态申请的内存块使用后未立即释放,导致内存区不够用,也会导致堆栈溢出

3、深层次递归调用

4、局部变量过多

在对我的程序进行了简单分析之后,排除了后三种可能。由于程序主要是对摄像头的采回的图像进行加工和处理,所以极大可能是数组越界导致的。遇到这种情况确实是很麻烦的。由于我是第一次发现这个问题,我不知道是不是我最及程序才出现的这个问题,于是我将整个程序进行了整体的筛查。

我来分享一下我的筛查方式。主要利用的是IAR的在线调试。我先定义出全局一个变量对其进行观察,然后将全部函数注释掉,然后按照程序运行顺序一点点解开,先锁定函数,然后在函数中在像这样一部分一部分的确认问题所在。最终在程序中找到了三个出现错误的函数,并且将他们进行了修复。

遇到这种问题,修bug是很简单的。但是要去找到bug的位置是比较难的。尤其是那些程序可以正常运行,只是在某些特殊情况下才会出现错误的bug,这些bug会比较难发现。所以必须要有足够的耐心。还有一定要在利用数组的时候将程序想全面,尽量去避免这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值