/ / Instrumenty ciągle mi mówią, że mam przeciek pamięci - c ++, qt, przeciek pamięci

Instrumenty powtarzają mi, że mam wyciek pamięci - c ++, qt, wycieki pamięci

Jestem nowy w komputerach Mac i instrumentach, używam go do testowaniaw mojej aplikacji Qt znalazłem wiele wyciekających obiektów, prawie wszystkie pochodzą z biblioteki Qt lib. Bardzo ostrożnie sprawdzam kody, ale nie mogę znaleźć problemu. Aby uniknąć problemu wycieku pamięci, ściśle przestrzegam zasad RAII, zawsze pozwól klasie obsługiwać zasoby, upewnij się, że każdy widżet ma element nadrzędny, te widżety bez elementu nadrzędnego (zamierzone) będą strzegły inteligentnym wskaźnikiem lub Qt :: WA_DeleteOnClose.

Aby naprawić ostrzeżenie o wycieku pamięci, piszę bardzo prostą aplikację Qt i używam jej jako testu, instrumenty zawsze pokazują, że mam wycieki pamięci (jak na wykresie), nawet najprostsze Aplikacja Qt, którą utworzył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

Zadzwoń do drzewa

Wyciekły przedmiot

Trochę zmieniam kody i widzę, że wycieki pamięci pokazywane przez Instruments wciąż rosną albo 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();
}

Zadzwoń do drzewa Wyciekły przedmiot

Mam nadzieję, że wycieki pamięci wzrosnąże to pomyłka instrumentu, inaczej muszę wrócić do Qt4 (i nie wiem, czy miałby ten sam problem, czy nie) .I nie sądzę, że ta prosta aplikacja może przejść kontrolę jakości w sklepie Mac App Store (OSX). Co się dzieje? Jak mam wyjaśnić to zjawisko? Jeśli nie ma wycieku pamięci, powinienem nie widzę żadnej wiadomości o obiekcie przecieku, czy mam rację? Błąd Qt5.0.2?

Odpowiedzi:

1 dla odpowiedzi № 1

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

Zasadniczo środowisko powinno wykorzystywać inteligentne wskaźniki, lub wykrywające wycieki pamięci powinny być śledzone i rozwiązywane „ręcznie”.

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

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