2013-02-18 74 views
2

我使用覆蓋率(5.5.1)(其中包括)來加強我的代碼。我偶然發現了一個問題,現在我懷疑我的掩護設置不完整。看看這個例子:覆蓋率和C++:堆(與新)與堆棧分配

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)的缺陷,但只有當在棧上分配的,而不是當用new創建。因此,在我的main-功能中,我得到了A a2(5)的警告,但不是A *a1 = new A(5)

在我看來,使用new時,覆蓋範圍正在處理對構造函數的調用與在堆棧上創建對象時的調用不同。

有沒有我在我的遮蓋配置中忽略的東西?我能做些什麼來在堆上分配警告?

回答

0

原來,根據支持,這是Coverity中的一個已知錯誤(即使在當前版本中)。修補程序可能會在下一個夏季發佈的版本中提供。

該錯誤列於ID:50128 UNINIT FN:在初始化之前在構造函數中使用的成員,並且在固定和釋放時將被放入發行說明中。