静态分析 - 覆盖率和C++:堆(使用新)与堆栈上分配
static analysis - Coverity and C++: heap (with new) vs. on-stack allocation
我正在使用覆盖性(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
。在这个问题中,我了解到编译器或任何其他工具发出这样的警告会"很高兴"。
与我现在发现的问题的最初理解相反,覆盖率实际上会发出完全匹配的缺陷(UNINT(,但仅在堆栈上分配时,而不是在使用new
创建时。因此,在我的main
函数中,我收到A a2(5)
的警告,但没有收到A *a1 = new A(5)
的警告。
在我看来,覆盖率在使用new
时处理对构造函数的调用与在堆栈上创建对象时不同。
在我的覆盖配置中,我忽略了什么吗?在堆上分配时,我可以做些什么来显示警告?
事实证明,根据支持,这是 Coverity 中的一个已知错误(即使在当前版本中(。修复程序可能会随明年夏天发布的版本一起提供。
该错误列在初始化前构造函数中使用的 ID:50128 UNINIT FN: 成员下,因此在修复和发布时将放入发行说明中。
相关文章:
- 从堆栈分配的原始指针构造智能指针
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- C++析构函数调用两次,堆栈分配的复合对象
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- 何时在函数中声明堆栈分配变量?
- 使用 std::map 的递归堆栈分配如何工作?
- tcmalloc 与纯堆栈分配性能有多接近
- 安全分配堆栈分配的阵列
- C++ 中的黑白堆分配对象和堆栈分配对象的性能差异
- 跟踪(堆栈分配)对象
- 堆栈分配的确切时间
- 未初始化的值是由堆栈分配 - Qt - C++创建的
- 用于堆栈分配对象的C++虚拟析构函数内联
- C STD :: BAD_ALLOC来自堆栈分配
- 是使用COM创建的对象,将采用分配或堆栈分配的内存
- C++ 中针对大型的堆栈分配
- 堆栈分配的向量如何在 C++ 中扩展