江湖车侠|都是变量未初始化惹的祸!
最近排查软件的一个问题 , 百思不得其解 , 最后查下来竟然是一个变量没有初始化引起的!
1、问题排查过程最近在按照新需求 , 开发新功能 , 在调试某个功能时 , 出现一个诡异的现象 。 在运行通过release安装包安装的exe版本 , 始终是有问题的 , 但是直接在VS2017中进行release版本调试 , 发现功能居然是正常的!
同样都是release版本 , 底层库都是一样的 , 两个版本表现居然截然不同 , 这太奇怪了!百思不得其解!
于是继续排查 , 想到这个问题在之前稳定版本是没有的 , 应该是最近开发新功能引起的 , 于是使用svn查看了最近的代码提交记录 , 找到相关代码模块仔细排查 , 结果发现是一个BOOL变量影响了代码的控制逻辑 。 在程序运行的开始阶段 , 该变量应该是FALSE的 , 出问题的版本居然走到该控制变量为TRUE的分支中 , 导致代码的控制逻辑出了问题 , 所以导致上述问题!
在变量没有初始化时 , 很多编译器在debug下会自动初始化 , 但在release下不会自动初始化 。 release下变量如果没有初始化 , 变量的值将会是一个随机值 , 是给该变量分配的内存时内存中的值 , 所以会是随机值 , 一旦出现了随机值 , 程序运行时会出现不可预知的结果 。
本例中 , 直接运行安装包安装的exe版本与release调试运行 , 该控制变量会得到随机值 , 所以导致两种情况下的不同表现!
另外 , 有点迷惑人的地方是 , 几乎每次直接运行安装包安装的exe版本时 , 该BOOL变量的随机值都是TRUE , 但在release下调试运行时该变量的值一直是FALSE , 这也许和两种情况的启动运行机制差异有关系吧!反正是变量没有初始化引起的!
2、总结【江湖车侠|都是变量未初始化惹的祸!】以前我们在开发团队中一再强调变量要初始化 , 但还是有人说 , 变量不需要一上来就初始化 , 只要控制好自己的代码逻辑就好了 , 我表示很不赞同!只有经历过问题的人 , 才会有深刻体会吧!
推荐阅读
- 杨幂■杨幂的极简穿搭真是时髦!限定的黑色系设计,满满都是优雅气质
- 作文|如何正确看待,张子枫的高考事件?很多人都是断章取义吗?
- 方糖文库|还是武侠网游的鼻祖!江湖从来都不缺英雄,方舟子不仅只会打假
- Angelababy|《跑男》不敢请的明星,一个是因为郑恺,还有两个都是因为杨颖!
- 鸽书说教育|走哪都是这样的情景,都不敢出门了,搞笑GIF:虐狗季
- 文小兰说娱乐|你们都是弱鸡,搞笑GIF:女汉子面前
- 爱卡汽车|25万买顶配红旗HS5还是次低配冠道?,都是主打超大第二排空间
- 公安部网安局|| “杀猪盘”——江湖上一个必须知道的词,网警漫画
- 恩情江湖|她年轻时就迷倒大片男人,不结婚不生孩子,如今41岁美得太不像话
- 恩特聊历史|大国崛起有4条历史规律,大国崛起之路从来都是充满血雨腥风
