Coverity和C ++:heap(with new)vs on-stack allocation

时间:2013-02-18 11:10:44

标签: c++ static-analysis coverity

我正在使用 coverity (5.5.1)(以及其他)来强化我的代码。我偶然发现了一个问题,现在我怀疑我的覆盖设置是不完整的。看看这个例子:

class A
{
    int _a,_b;
public:
    A(int b) : _a(_b), _b(b)
    { }
};

int main(void)
{
    A *a1 = new A(5);
    delete a1;

    A a2(5);
    return 0;
}

可以看出,在使用_b初始化之前,我正在使用_a初始化b。在this问题中,我了解到编译器或任何其他工具发出这样的警告会“很高兴”。

与我最初对我现在发现的问题的理解相反,该覆盖率实际上会发出一个完全匹配的缺陷( UNINT ),但只有在堆栈上分配时才会发生,而不是在使用{{ 1}}。因此,在我的new - 函数中,我收到了main的警告,但没有收到A a2(5)的警告。

在我看来,覆盖率在使用A *a1 = new A(5)时处理对构造函数的调用与在堆栈上创建的对象时的处理不同。

在我的封面配置中有什么我忽略的吗?在堆上分配警告时,我该怎么办?

1 个答案:

答案 0 :(得分:0)

事实证明,根据支持,这是Coverity中的已知错误(即使在当前版本中)。随着第二年夏天发布的版本可能会出现修复。

该错误列在ID:50128 UNINIT FN:初始化之前在构造函数中使用的成员中,并且在修复和释放后将被放入发行说明中。