技术编程|都是变量未初始化惹的祸!
最近排查软件的一个问题 , 百思不得其解 , 最后查下来竟然是一个变量没有初始化引起的!
本文插图
1、问题排查过程
最近在按照新需求 , 开发新功能 , 在调试某个功能时 , 出现一个诡异的现象 。 在运行通过release安装包安装的exe版本 , 始终是有问题的 , 但是直接在VS2017中进行release版本调试 , 发现功能居然是正常的!
同样都是release版本 , 底层库都是一样的 , 两个版本表现居然截然不同 , 这太奇怪了!百思不得其解!
于是继续排查 , 想到这个问题在之前稳定版本是没有的 , 应该是最近开发新功能引起的 , 于是使用svn查看了最近的代码提交记录 , 找到相关代码模块仔细排查 , 结果发现是一个BOOL变量影响了代码的控制逻辑 。 在程序运行的开始阶段 , 该变量应该是FALSE的 , 出问题的版本居然走到该控制变量为TRUE的分支中 , 导致代码的控制逻辑出了问题 , 所以导致上述问题!
在变量没有初始化时 , 很多编译器在debug下会自动初始化 , 但在release下不会自动初始化 。 release下变量如果没有初始化 , 变量的值将会是一个随机值 , 是给该变量分配的内存时内存中的值 , 所以会是随机值 , 一旦出现了随机值 , 程序运行时会出现不可预知的结果 。
本例中 , 直接运行安装包安装的exe版本与release调试运行 , 该控制变量会得到随机值 , 所以导致两种情况下的不同表现!
另外 , 有点迷惑人的地方是 , 几乎每次直接运行安装包安装的exe版本时 , 该BOOL变量的随机值都是TRUE , 但在release下调试运行时该变量的值一直是FALSE , 这也许和两种情况的启动运行机制差异有关系吧!反正是变量没有初始化引起的!2、总结
【技术编程|都是变量未初始化惹的祸!】以前我们在开发团队中一再强调变量要初始化 , 但还是有人说 , 变量不需要一上来就初始化 , 只要控制好自己的代码逻辑就好了 , 我表示很不赞同!只有经历过问题的人 , 才会有深刻体会吧!
推荐阅读
- 摄像头|小米截胡中兴屏下摄像头技术,小米研发还是供应链技术?
- 马斯克|马斯克用活猪演示脑机接口技术:实时读取猪脑信息 心灵感应成真了
- 三防|带你了解三防手持终端的秘密
- 玩转3C数码|小米和华为看似是“死对头”,实则各不冲突,都是民族骄傲!
- 第三|原创 小米发布第三代屏下相机技术,或将在Mix 4上首秀?
- 海信|首个新兴显示技术分标委成立 海信牵头制定国标
- 中年|Python编程语言有什么独特的优势呢?
- |马斯克用活猪演示脑机技术,他希望今年年底前能在人体内植入
- 互联网的放大镜|小米截胡中兴屏下摄像头技术,小米研发还是供应链技术?
- 新机发布|原创 小米发布第三代屏下相机技术,或将在Mix 4上首秀?
