【问题标题】:Coverity and C++: heap (with new) vs. on-stack allocationCoverity 和 C++:堆(带有新的)与堆栈分配
【发布时间】:2013-02-18 11:10:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ static-analysis coverity


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 2012-06-26
      • 2014-06-23
      • 2017-01-04
      • 2011-05-28
      • 2017-08-12
      • 1970-01-01
      相关资源
      最近更新 更多