Warum erkennt Valgrind in meinem "Test" -Programm kein Speicherleck?

8

Der gesamte Testcode ist in main.cpp wie folgt enthalten:

%Vor%

Ich kompiliere ohne Optimierungen -O0 (aus einem Eclipse Qt-Projekt) mit:

%Vor%

Verknüpfen Sie dann wie folgt:

%Vor%

Ich führe die ausführbare Datei durch valgrind und erhalte die folgende Ausgabe:

%Vor%

Ich glaube, dass valgrind ein Speicherleck melden sollte, anstatt dass Lecks aufgrund des Heap-Speichers, der in den Aufrufen von new int

zugewiesen wurde, möglich sind

EDIT: Code oben geändert, um std :: cout anstelle von qDebug () mit demselben Ergebnis zu verwenden

Wenn ich denselben Code (aus einem Eclipse-CDT-Projekt) ohne Qt-Abhängigkeiten kompiliere und verknüpfe, erkennt valgrind das Leck:

%Vor%

Ich benutze Kubuntu 10.04 32 Bit und habe sowohl Debug- als auch Release-Builds ausprobiert, was mache ich falsch oder warum meldet Valgrind kein Speicherleck, wenn es mit Qt verlinkt ist?

    
Peter McG 24.01.2011, 08:35
quelle

3 Antworten

18

Der Grund dafür ist, dass der Aufruf an:

%Vor%

hat Valgrind auf / usr / bin / test ausgeführt, was ein eingebautes Programm ist, das Dateitypen überprüft und Werte vergleicht, alles was ich brauchte war:

%Vor%     
Peter McG 24.01.2011, 09:49
quelle
0

Ich habe qDebug () durch std :: cout ersetzt:

%Vor%     
knivil 24.01.2011 08:50
quelle
0

Wahrscheinlich dein Compiler eliminiere diesen Code in der Optimierung, versuche das Kompilieren mit -O0 (ohne Optimierungsoptionen).

Als Kommentar wird bei debian lenny mit -O2 das Leck erkannt:

%Vor%

Der Compiler:

%Vor%     
quelle

Tags und Links