c++ - Coverity 和 C++ : heap (with new) vs. 堆栈分配

标签 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 问题中,我了解到编译器或任何其他工具发出这样的警告“很好”。

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

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

在我的 coverity 配置中有什么我忽略的吗?在堆上分配时,我该怎么做才能收到警告?

最佳答案

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

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

关于c++ - Coverity 和 C++ : heap (with new) vs. 堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934911/

相关文章:

c++ - 两个整数相乘,结果存入浮点型变量,结果能溢出吗?

c++ - 如何使用复合键获取 boost::multi_index_container 中第一个键的不同计数

python - 如何使用 urllib2 向 Coverity Web api 发送请求?

python - coverity 工具可以扫描 python 代码库以查找 SCA 和安全问题吗?

c++ - 使用 sprintf/printf 使用 %ld 格式字符串而不是 %d 和 int 数据类型的效果

c++ - 在可移动类型的构造函数 lambda 中安全使用 captured this

c++ - 在我的 C++ 应用程序中包含第三方代码时出现问题

java - 为什么此代码会生成 "Potential resource leak"警告?

c - 静态代码分析器工具中的函数调用列表

python - python 中进行敏感性分析的 SAlib 库出错