我正在使用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对其进行初始化。在this问题中,我了解到由编译器或任何其他工具发出这样的警告是“很高兴”的。

与我对现在发现的问题的最初理解相反,覆盖率实际上产生了一个与(UNINT)完全匹配的缺陷,但仅当分配在堆栈上时才发生,而不是使用b创建时。因此,在我的new -function中,我得到main的警告,但没有得到A a2(5)的警告。

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

我的coverity配置中有什么我忽略的东西吗?在堆上分配警告时该怎么办?

最佳答案

事实证明,根据支持,这是Coverity中的一个已知错误(即使在当前版本中也是如此)。次年夏天发布的版本可能会提供修复程序。

该错误在ID:50128 UNINIT FN:下列出,该ID在初始化之前在构造函数中使用,并且在固定和发行时将被放入发行说明中。

09-05 22:57