Ich stehe vor einem Memory-Leak-Problem im Code, während es läuft, der Heap geht weiter auf Maximum und ich muss den Dienst neu starten, ich habe Top-Befehl ausgeführt und sehe, dass der Heap immer dann ansteigt, wenn ein Szenario aufgerufen wird der Service.
Ich habe den Dienst mit valgrind ausgeführt,
%Vor%Ich sehe keine definitiv verlorenen oder möglicherweise verlorenen Blöcke, während ich die Szenarien ausführe, aber ich sehe eine Menge bedingten Sprung oder Bewegung hängt von nicht initialisierten Wert (en) Fehlern ab.
Zählen diese für ein Speicherleck?
Beispiel von dem, was ich bekomme:
%Vor%........
%Vor%Kann jemand helfen.
Nein, das bedeutet, dass Sie auf Speicher zugreifen, der nicht initialisiert wurde:
%Vor%würde diesen Fehler auslösen.
Etwas gebräuchlicher wäre:
%Vor% Schließlich passiert das häufig mit malloc-basiertem Code, wenn Sie memset
nicht zum Löschen des gesamten Puffers verwenden. Also,
Dies wird im Valgrind-Benutzerhandbuch im Abschnitt 4.2.2 erläutert. Verwendung nicht initialisierter Werte :
Ein nicht initialisierter Wert für die Verwendung wird gemeldet, wenn Ihr Programm a verwendet Wert, der nicht initialisiert wurde - also nicht definiert ist.
...
Es ist wichtig zu verstehen, dass Ihr Programm herum kopieren kann Junk (nicht initialisiert) Daten so viel wie es will. Memcheck beobachtet dies und behält die Daten im Auge, beschweren sich aber nicht. Eine Beschwerde ist Wird nur ausgegeben, wenn Ihr Programm versucht, nicht initialisiert zu verwenden Daten auf eine Art und Weise, die sich auf das extern sichtbare Ihres Programms auswirken könnte Verhalten.
Nein, dies deutet nicht direkt auf Speicherlecks hin. Ein bedingter Sprung in Abhängigkeit von einer nicht initialisierten Variablen kann jedoch zu praktisch allem führen. Die Verwendung nicht initialisierter Variablen ruft im Allgemeinen undefiniertes Verhalten hervor.