我正在使用 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)
时处理对构造函数的调用与在堆栈上创建的对象时的处理不同。
在我的封面配置中有什么我忽略的吗?在堆上分配警告时,我该怎么办?
答案 0 :(得分:0)
事实证明,根据支持,这是Coverity中的已知错误(即使在当前版本中)。随着第二年夏天发布的版本可能会出现修复。
该错误列在ID:50128 UNINIT FN:初始化之前在构造函数中使用的成员中,并且在修复和释放后将被放入发行说明中。