我试图从我的代码中删除违规规则9.1。
规则9.1:具有自动存储持续时间的对象的值在设置之前不应被读取
示例代码:
#include <stdint.h>
#include <stdbool.h>
#define VAL 0xABCDEFABU
int32_t main(void);
static int32_t do_test(bool k);
static void func(uint64_t *var3, const uint64_t *var5);
int32_t
main (void)
{
bool b = false;
int32_t y = do_test(b);
return y;
}
static int32_t
do_test(bool k)
{
uint64_t i = 0, var4[10];
int32_t result = 0;
for(i = 0U; i < 10U; i++) {
var4[i] = VAL + i;
}
if(k == false) {
uint64_t var2[10];
func(var2, var4);
if(var2[9] == var4[9]) {
result = 1;
}
}
return result;
}
static void
func(uint64_t *var3, const uint64_t *var5)
{
int32_t i;
for(i = 0; i < 10; i++) {
var3[i] = var5[i];
}
}
我通过调用另一个函数&#34; func&#34;来在函数do_test中初始化var2。其中var4被复制到var2。
编译正常,我得y值= 1.
是否由于func中的参数作为指针而导致的违规,并且函数do_test没有通过func中的指针了解值赋值
有没有解决这个问题?
答案 0 :(得分:5)
这是许多静态分析仪中常见的工具错误。您的静态分析器显然无法理解函数func
初始化var2
的所有项目,因此您在行var2[9] == var4[9]
上得到误报。
在许多静态分析器上,int my_array[10]; initialize(my_array);
之类的代码会产生令人沮丧的误报。 “你尝试在数组初始化之前初始化它!”哦,真的......谢谢你,最有帮助的静态分析仪。
你的代码很好。向您的工具供应商提交错误报告。