技术编程|都是变量未初始化惹的祸!
最近排查软件的一个问题 , 百思不得其解 , 最后查下来竟然是一个变量没有初始化引起的!
【技术编程|都是变量未初始化惹的祸!】
本文插图
1、问题排查过程
最近在按照新需求 , 开发新功能 , 在调试某个功能时 , 出现一个诡异的现象 。 在运行通过release安装包安装的exe版本 , 始终是有问题的 , 但是直接在VS2017中进行release版本调试 , 发现功能居然是正常的!
同样都是release版本 , 底层库都是一样的 , 两个版本表现居然截然不同 , 这太奇怪了!百思不得其解!
于是继续排查 , 想到这个问题在之前稳定版本是没有的 , 应该是最近开发新功能引起的 , 于是使用svn查看了最近的代码提交记录 , 找到相关代码模块仔细排查 , 结果发现是一个BOOL变量影响了代码的控制逻辑 。 在程序运行的开始阶段 , 该变量应该是FALSE的 , 出问题的版本居然走到该控制变量为TRUE的分支中 , 导致代码的控制逻辑出了问题 , 所以导致上述问题!
在变量没有初始化时 , 很多编译器在debug下会自动初始化 , 但在release下不会自动初始化 。 release下变量如果没有初始化 , 变量的值将会是一个随机值 , 是给该变量分配的内存时内存中的值 , 所以会是随机值 , 一旦出现了随机值 , 程序运行时会出现不可预知的结果 。
本例中 , 直接运行安装包安装的exe版本与release调试运行 , 该控制变量会得到随机值 , 所以导致两种情况下的不同表现!
另外 , 有点迷惑人的地方是 , 几乎每次直接运行安装包安装的exe版本时 , 该BOOL变量的随机值都是TRUE , 但在release下调试运行时该变量的值一直是FALSE , 这也许和两种情况的启动运行机制差异有关系吧!反正是变量没有初始化引起的!2、总结
以前我们在开发团队中一再强调变量要初始化 , 但还是有人说 , 变量不需要一上来就初始化 , 只要控制好自己的代码逻辑就好了 , 我表示很不赞同!只有经历过问题的人 , 才会有深刻体会吧!
推荐阅读
- 科学探索|新技术能快速将海水变成饮用水
- 结婚|两人都是老戏骨,结婚15年女儿都14岁了,但却无人知他们是夫妻
- 南宫沐风|人啊,除了健康,什么都是浮云
- 美将38家华为子公司列入实体清单|美将38家华为子公司列入实体清单,限制它们获得某些“敏感技术”
- |每一次“认真回复”都是立口碑于民心
- 现代迎来技术“爆发”解读第十代索纳塔动力系统
- 科技日报|路边树上的这些奇怪小物件都是害虫杀手
- 栽培技术|发展林下树下黑木耳栽培技术,促进林业生产发展,增加经济收入
- 隐身能力太差,俄军仍采购76架苏57战机,新技术加持或超越F35
- 游乐会|荒野乱斗:频繁掉分都是英雄的锅?你模式选不对,怎么玩都会输
