valgrind Bedingter Sprung oder Bewegung hängt von nicht initialisierten Werten ab, zeigt dies einen Speicherverlust an?

7

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.

    
user862833 19.02.2013, 08:05
quelle

3 Antworten

15

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,

  1. malloc eine Puffergröße m
  2. liest (z. B. von einem Socket) n Byte
  3. schreibe m Bytes in eine Datei; (m-n) Bytes wären nicht initialisiert worden
sehe 19.02.2013, 08:07
quelle
4

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.

    
logoff 19.02.2013 08:09
quelle
1

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.

    
Ivaylo Strandjev 19.02.2013 08:08
quelle

Tags und Links