过去,我们在C代码中使用未初始化的数据时遇到了一些麻烦。我在下面的代码示例中尝试了两种不同的静态代码分析工具。他们都没有抱怨将指针传递给未初始化的数据。你知道有什么工具可以解决这个问题吗?
提前谢谢!
static int useByVal(const int int_val)
{
return int_val + 1;
}
static void useByRef(int* const int_ptr)
{
if (int_ptr != (void*)0)
{
(*int_ptr)++;
}
}
int main(void)
{
int i;
int k;
/*** GOOD: The tool detects error: Using value of uninitialized automatic object 'i' */
i = useByVal(i);
/*** BAD: The tool does not catch uninitialized object 'k' when passed by reference */
useByRef(&k);
/*** BAD: Since call to 'useByRef(&k)', the tool now consider 'k' as initialized */
return i+k;
}
答案 0 :(得分:0)
不,我不知道是否有任何工具可以捕获它。原因是他们通常在逐个功能的基础上进行分析。换句话说,虽然分析main
工具不会分析useByVal
或useByRef
,但会对它们做出合理的假设(就像它们期望未初始化的对象一样)。
此外,如果他们在这种情况下生成了消息,那么您需要添加注释/编译指示以删除它们并说出"此用法正常;不再发出消息"。由于指针传递的性质和频率,你的程序将充满它们。
更好地实施一些动态技术并在测试过程中发现问题。