2013-04-24 13 views
14

Jestem nowy dla mac i instrumentów, używam go do przetestowania mojej aplikacji Qt, znalazłem wiele wyciekł obiektów, prawie wszystkie z nich pochodzą z Qt lib.I sprawdź mój kody są bardzo ostrożne, ale nie mogą znaleźć problemu. Aby uniknąć problemu z wyciekiem pamięci, ściśle przestrzegam zasad RAII, zawsze pozwól klasie obsługiwać zasoby, upewnij się, że każdy widget ma rodzica, ten widget bez rodzica (z założeniem) będzie chroniony przez inteligentny wskaźnik lub Qt :: WA_DeleteOnClose.Instrumenty mówią mi, że mam wyciek pamięci

Aby rozwiązać ostrzeżenie przeciek pamięci, piszę bardzo prosty Qt aplikacji i używać go jako test, instrumenty zawsze pokazują, że mam kilka wycieków pamięci (jak wykresie) nawet najbardziej najprostszy Qt aplikacji stworzyłem.

#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(); 
    } 

Wykres instrumentów

Call tree

Leaked object

I zmieniać Kody trochę i zobaczyć pamięć przeciek pokaz instrumenty byłyby nadal rosły czy nie.

#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(); 
    } 

Call tree Leaked object

wyciek pamięci robić wzrost, zdecydowanie nadzieję, że to pomyłka instrumentu, jeszcze muszę wracać do Qt4 (i nie wiem, to będzie mają ten sam problem lub nie). Nie sądzę, by ta prosta aplikacja mogła przejść kontrolę jakości w sklepie z aplikacjami mac (OSX). Co się dzieje? Jak wyjaśnić to zjawisko? Jeśli nie ma wycieku pamięci, powinienem nie zobaczyć żadnej wiadomości o obiekcie wycieku, czy mam rację? Błąd Qt5.0.2?

+1

Jeśli program pozostanie włączony przez bardzo długi czas, czy zestaw pracy pamięci stale rośnie? Nie spieszyłbym się z założeniem, że coś jest nie tak z detektorem wycieków, ale nie był to pierwszy raz, kiedy widziałem, że ktoś daje fałszywe pozytywne wyniki. –

+0

Edytuję odpowiedź, nadaję jej nowy wygląd, a wyciek pamięci pokazywany przez instrumenty wzrasta, co za zła wiadomość – StereoMatching

+0

Co miałem na myśli przez "czy zestaw pamięci pracuje stale?" było "Jeśli obserwujesz okno Menedżera zadań systemu Windows (lub odpowiednika Maca), czy kolumna zestawu roboczego stale się zwiększa?" –

Odpowiedz

1

Pamięć rzeczywiście wycieka, czego zaufany framework nigdy nie powinien.

Zasadniczo struktura powinna wykorzystywać inteligentne wskaźniki lub obrażanie wycieków pamięci powinno być śledzone i traktowane "ręcznie".

Jeśli nie było wycieku, cała pamięć zostanie zwrócona do stosu po użyciu.

Zgodnie z bugreports.qt-project.org/browse/QTBUG-7505 ten błąd występuje w wersji 4.6.0.