静态分析:将指针传递给未初始化的数据

时间:2013-09-02 06:51:50

标签: variables pointers static code-analysis initialization

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

1 个答案:

答案 0 :(得分:0)

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

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

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