valgrind: nicht alle Heaps sind frei ?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

valgrind: nicht alle Heaps sind frei ?
Hallo Kollegen,

Valgrind:

Source:

      1 #include <string>
      2 #include <iostream>
      3 using namespace std;
      4 
      5 class X
      6 {
      7         public:
      8                 int * a;
      9 
     10                 X(int size)
     11                 {
     12                         a = new int;
     13                 }
     14 
     15                 ~X()
     16                 {
     17                         cout << "destructor called!" << endl;
     18                         delete a;
     19                 }
     20 };
     21 
     22 
     23 int main()
     24 {
     25         X obj(7);
     26         return 0;
     27 }

Es steht, ich habe 3 allocs und nur 2 befreit.
Ich habe ein Integer Object allokiert und im Destructor befreit, das Obj(7) wird am Ende automatisch befreit. Die sind aber 2. Kann mir jemand sagen, wer der dritte ist

Vielen Dank! :wink:


Zitat valgrind: [m]Rerun with --leak-check=full to see details of leaked memory[/m]


hat leider nicht weiteres gebracht :\


Da die unter ‘still reachable’ eingeordnet sind, versuch’s doch auch mit [m]–show-reachable=yes[/m], da könnte mehr Info kommen.


Bei valgrind geht es um Heap-Allokationen. Die Variable [m]obj[/m] wird aber auf dem Stack allokiert und daher nicht im valgrind log angezeigt.

Libraries brauchen ab und zu auch Heap-Speicher, was dann auf die selbe Weise im valgrind log erscheint(*). cout verwendet vermutlich einen buffer. Die Zeile könntest du mal entfernen und testen, was sich ändert.

(*) Manche davon werden unterdrückt, weil bekannt ist, dass der Speicher nicht freigegeben wird, aber es sich trotzdem nicht um einen Leak handelt.

1 „Gefällt mir“

Danke für eure Antworten.

Zur Info:

Ich habe das Program im cip ausgeführt. Da werden alle Heaps erfolgreich befreit.

Also irgendwas stimmt mit der Valgrind Version oder Compiler (g++) nicht ? o.O

Jemand hat mal das gleiche gehabt:
http://stackoverflow.com/questions/30376601/valgrind-memory-still-reachable-with-trivial-program-using-iostream

Eine schöne Woche! :wink:


Es könnte sein, dass die Warnung im Cip durch ein suppression file unterdrückt wird, siehe z.B. hier:

https://fsi.cs.fau.de/forum/post/148683

1 „Gefällt mir“