2013-04-24 9 views
14

私はMacと計測器が新です。私はQtアプリをテストするために使っています。リークしたオブジェクトがたくさんありました。ほとんどすべてQtライブラリから来ています。コードは非常に慎重ですが、問題を見つけることができません。メモリリークの問題を避けるために、私は厳密にRAIIのルールに従います。常にクラスがリソースを処理できるようにし、すべてのウィジェットに親があることを確認します。親のないウィジェットは、スマートポインタまたはQt :: WA_DeleteOnCloseで保護します。メモリリークの警告を修正するにはインストゥルメントは私にメモリリークを伝え続けています

、私は 楽器はいつも私が(グラフのように)いくつかのメモリリークを持っていることを示し、非常に単純なのQtアプリケーションを作成し、テストとしてそれを使用する私が作成したとしても、ほとんどの最も簡単な のQtアプリ。

#include <QApplication> 
    #include <QLabel> 

     int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 


     QLabel w; 
     w.resize(320, 240); 
     w.show(); 

     return a.exec(); 
    } 

楽器

Call tree

Leaked object

のグラフは、私は、コードを少し変更し、そして楽器によるメモリリークショーが か上昇続けるだろう参照してください。

#include <QApplication> 
    #include <QLabel> 

     int main(int argc, char *argv[]) 
     { 
     QApplication a(argc, argv); 


     for(size_t i = 0; i != 100; ++i){ 
     QLabel w; 
     w.resize(320, 240); 
     w.show(); 
     } 
     QLabel w; 
     w.resize(320, 240); 
     w.show(); 

     return a.exec(); 
    } 

​​ Leaked object

メモリリークが増加してやる、私は強く、私は戻ってQt4版にドロップする必要があり(と私はそれが希望を知らない他の 、これは楽器の間違いであることを願っています同じ問題があるかどうかはわかりません).I この単純なアプリがMac App Store(OSX)の品質チェックに合格するとは思いません。 何が起こっているのですか?この現象を説明するにはどうすればいいですか?メモリリークがない場合は、 にリークオブジェクトのメッセージが表示されません。Qt5.0.2のバグですか?

+1

非常に長い時間プログラムを実行したままにしておくと、メモリワーキングセットが着実に増加していますか?漏れ検出器に何か問題があると推測するのは急いではありませんが、誤検知を初めて見たのは初めてではありません。 –

+0

私は自分の答えを編集して、新しい試みをし、楽器で示されたメモリリークが増えます、悪いニュース – StereoMatching

+0

私は「メモリの作業セットが着実に増加していますか? 「Windowsのタスクマネージャウィンドウ(またはMac相当版)を見ると、作業セットの列が順調に増えていますか?」 –

答えて

1

メモリが実際にリークされていますが、これは信頼できるフレームワークでは決して行うべきではありません。

基本的に、フレームワークはスマートポインタを使用する必要があります。または、メモリリークの原因を調べて「手動」で処理する必要があります。

リークがない場合、すべてのメモリは使用後にヒープに戻されます。

bugreports.qt-project.org/browse/QTBUG-7505によると、このバグはバージョン4.6.0です。

関連する問題