1

过去,我们在 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;
}
4

1 回答 1

0

不,我不知道是否有任何工具可以捕捉到这一点。原因是他们通常在逐个功能的基础上进行分析。换句话说,虽然分析main工具不会分析useByValor useByRef,但会对它们做出合理的假设(就像他们期望一个未初始化的对象一样)。

此外,如果他们在这种情况下确实生成了消息,那么您需要添加注释/编译指示以删除它们并说“这种用法没问题;不要再发出消息”。由于指针传递的性质和频率,您的程序将充满它们。

更好地实施一些动态技术并在测试期间发现问题。

于 2013-09-02T06:57:35.417 回答