在VC ++中确定未初始化的变量

时间:2013-08-30 09:47:47

标签: c++ visual-c++ visual-studio-2012 code-analysis initialization

我有这段代码,

#include <iostream>

void foo(int *a)
{
    std::cout<<*a<<std::endl;
}

int main()
{
    int i;
    foo(&i);
}

很明显,正在使用未初始化的变量。

我已尝试/RTCu并依赖error C4700,但对于上述代码,编译器并未将此标记为错误。

我也尝试过运行代码分析,将其报告为代码片段没有问题。

那么在源代码中确定未初始化变量的可靠方法是什么?

我知道valgrind在这里做了一个很棒的工作,但它不是我的选择,因为我有很多调用Windows API和MFC。

2 个答案:

答案 0 :(得分:1)

编译器没有可靠的方法来确定所有未初始化变量的情况。 Valgrind(以及其他类似的工具)不是编译器,而是动态分析工具,如上面的用户 gx 。还有静态分析工具可以检测使用单元化变量的许多情况。但是通常编译器与那些专用工具不匹配。

答案 1 :(得分:1)

关于静态分析部分:从VS2013开始,如果您可以访问另一个静态分析工具,我不会依赖默认分析器来捕获太多(尽管使用VS来捕获别人可能错过的内容是好的) 。虽然这可能不是这种情况,但请注意静态分析器可能会忽略他们在许多地方看到的模式,或者被其他开发人员视为可接受的标准的模式。如果Coverity没有报告此案,我会感到惊讶(抱歉,没有安装ATM进行测试)。如果确实忽略了它,可能会解释它被认为是可能的共享内存地址。