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
  • 定义于函数内部的变量,不会被初始化,其值是未定义的,及不可预期

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

相关推荐
dtq04245 小时前
C++小案例 - 日志实战
开发语言·c++
码匠许师傅6 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅7 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
WBluuue9 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
必须得开心呀11 小时前
字节序大小端科普
c++·程序人生
会编程的小孩11 小时前
C++ 子集
c++
SunkingYang12 小时前
C++20 vs C++17:新特性对比与用法指南
c++·c++20·特性·版本·新特性·对比·c++17
前进吧-程序员12 小时前
C++20 协程入门实战:从 co_await 到一个 100 行的异步任务调度器
网络·c++·c++20
前进吧-程序员12 小时前
实战:C++20 协程 + io_uring 写一个 400 行的 echo server
网络·c++·c++20
青少儿编程课堂16 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛