C++ 局部变量未初始化引发的程序概率性异常

看下面的代码段:

cpp 复制代码
bool func(int value)
{
    uint8_t a;
    if (value == 0)
    {
        a = 0;
    }
    if (a == 1)
    {
        return true;
    }
    return false;
}

你可能认为上面这段代码永远不会返回true,但实际上是有概率会返回true的,因为程序中没有对局部变量a进行初始化,在执行到if (a == 1)条件判断时,a的值是未定义的,是可能为1的,也就是说函数func有时返回true,有时返回false,是不可预期的。

如果定义变量时没有对变量进行初始化,则变量会执行"默认初始化","默认初始化"的规则由两部分决定:

  • 变量类型
  • 变量定义的位置

具体来说:如果是内置类型变量未被显示初始化,它的值由变量定义的位置决定

  • 定义于任何函数之外的变量,被初始化为0
  • 定义于函数内部的变量,不会被初始化,其值是未定义的,及不可预期

因此,强烈建议初始化每一个内置类型的变量

相关推荐
张张努力变强26 分钟前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
沉默-_-41 分钟前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
斐夷所非1 小时前
C++ 继承、多态与类型转换 | 函数重载 / 隐藏 / 覆盖实现与基派生类指针转换
c++
gfdhy2 小时前
【C++实战】多态版商品库存管理系统:从设计到实现,吃透面向对象核心
开发语言·数据库·c++·microsoft·毕业设计·毕设
清酒难咽2 小时前
算法案例之分治法
c++·经验分享·算法
小屁猪qAq2 小时前
强符号和弱符号及应用场景
c++·弱符号·链接·编译
头发还没掉光光2 小时前
HTTP协议从基础到实战全解析
linux·服务器·网络·c++·网络协议·http
jojo_zjx4 小时前
GESP 24年12月2级 数位和
c++
自由的好好干活4 小时前
PCI9x5x驱动移植支持PCI9054在win7下使用3
c++·驱动开发
WBluuue5 小时前
数据结构与算法:dp优化——优化尝试和状态设计
c++·算法·leetcode·动态规划