2

我正在使用覆盖率(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. 在这个问题中,我了解到编译器或任何其他工具发出这样的警告会“很高兴”。

与我对现在发现的问题的最初理解相反,coverity 实际上会发出一个完美匹配的缺陷(UNINT),但仅在堆栈上分配时,而不是在使用new. 所以在我的main-function 中,我得到了警告,A a2(5)但没有得到A *a1 = new A(5).

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

我的覆盖率配置中有什么我忽略的吗?在堆上分配时,我该怎么做才能发出警告?

4

1 回答 1

0

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

该错误列在 ID 下:50128 UNINIT FN:初始化之前在构造函数中使用的成员,因此将在修复和发布时放入发行说明中。

于 2013-03-04T10:59:00.343 回答