【发布时间】:2013-09-02 06:51:49
【问题描述】:
过去,我们在 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;
}
【问题讨论】:
-
尝试frama-c.com 或使用MELT 自定义GCC ......顺便说一句,使用带有
gcc -Wall -O2的最新GCC 4.8 会在前两个错误时发出警告。 -
谢谢!不知道 -O2 有助于提高 GCC 的警告级别。以后有时间会试试 MELT。
标签: variables pointers static code-analysis initialization