江湖车侠|都是变量未初始化惹的祸!
最近排查软件的一个问题 , 百思不得其解 , 最后查下来竟然是一个变量没有初始化引起的!
1、问题排查过程最近在按照新需求 , 开发新功能 , 在调试某个功能时 , 出现一个诡异的现象 。 在运行通过release安装包安装的exe版本 , 始终是有问题的 , 但是直接在VS2017中进行release版本调试 , 发现功能居然是正常的!
同样都是release版本 , 底层库都是一样的 , 两个版本表现居然截然不同 , 这太奇怪了!百思不得其解!
于是继续排查 , 想到这个问题在之前稳定版本是没有的 , 应该是最近开发新功能引起的 , 于是使用svn查看了最近的代码提交记录 , 找到相关代码模块仔细排查 , 结果发现是一个BOOL变量影响了代码的控制逻辑 。 在程序运行的开始阶段 , 该变量应该是FALSE的 , 出问题的版本居然走到该控制变量为TRUE的分支中 , 导致代码的控制逻辑出了问题 , 所以导致上述问题!
在变量没有初始化时 , 很多编译器在debug下会自动初始化 , 但在release下不会自动初始化 。 release下变量如果没有初始化 , 变量的值将会是一个随机值 , 是给该变量分配的内存时内存中的值 , 所以会是随机值 , 一旦出现了随机值 , 程序运行时会出现不可预知的结果 。
本例中 , 直接运行安装包安装的exe版本与release调试运行 , 该控制变量会得到随机值 , 所以导致两种情况下的不同表现!
另外 , 有点迷惑人的地方是 , 几乎每次直接运行安装包安装的exe版本时 , 该BOOL变量的随机值都是TRUE , 但在release下调试运行时该变量的值一直是FALSE , 这也许和两种情况的启动运行机制差异有关系吧!反正是变量没有初始化引起的!
2、总结【江湖车侠|都是变量未初始化惹的祸!】以前我们在开发团队中一再强调变量要初始化 , 但还是有人说 , 变量不需要一上来就初始化 , 只要控制好自己的代码逻辑就好了 , 我表示很不赞同!只有经历过问题的人 , 才会有深刻体会吧!
- 杨幂■杨幂的极简穿搭真是时髦!限定的黑色系设计,满满都是优雅气质
- 作文|如何正确看待,张子枫的高考事件?很多人都是断章取义吗?
- 公安部网安局|| “杀猪盘”——江湖上一个必须知道的词,网警漫画
- 恩情江湖|她年轻时就迷倒大片男人,不结婚不生孩子,如今41岁美得太不像话
- 恩特聊历史|大国崛起有4条历史规律,大国崛起之路从来都是充满血雨腥风
- 问董秘|尤其是净利润逐年都是...,投资者提问:最近2年的财报营收和净利润都有大幅度下降
- 教育|每一位中年女性,都是“乘风破浪的姐姐”
- 喵酱|都是篮球员的妻子,姚明的、易建联的,最后再看看周琦的
- 封面新闻|30秒|张若昀再闯江湖 携手胡军李庚希张天爱《雪中悍刀行》
- 汕尾城市在线网|女生的“体重”一直都是一个谜(漫画)体重对于女生来说有多重要,不夸张的说,女生的体重决定了自己的颜值...