1、返回值未初始化
在函数返回语句中,如果将未初始化变量返回,而函数的调用方对该返回值进行了使用,会因使用的变量未初始化,造成程序运行产生意料之外的行为。
详细请参见CWE-665: Improper Initialization2、“返回值未初始化”的危害
返回值未初始化的危害取决于函数调用方对未初始化返回值的使用,通常会触发非预期的程序行为3、示例代码
示例源于toyota-itc-benchmarks-master (https://github.com/regehr/itc-benchmarks),源文件名:uninit_var.c。3.1 缺陷代码
在上述示例代码中,第71行声明 int 类型变量 ret,但没有进行初始化,第72行通过 if 语句进行条件判断,当条件成立的情况下,为 ret 赋值为1,在第74行通过return 语句返回。由于 if(0) 恒为 false,因此 ret 不会被赋值,当第74行返回时,返回值是未初始化的,存在“返回值未初始化”问题。
使用代码卫士对上述示例代码进行检测,可以检出“返回值未初始化”缺陷,显示等级为中。如图1所示:图1:“返回值未初始化”检测示例
3.2 修复代码
在上述修复代码中,修改第72行的 if 语句条件,对 ret 进行赋值,当第74行进行返回时,此时 ret 已经被赋值,从而避免了返回值未初始化问题。
使用代码卫士对修复后的代码进行检测,可以看到已不存在“返回值未初始化”缺陷。如图2:图2:修复后检测结果




