unklares Speicherleck mit Vektor, C ++, beim Aufruf von exit

7

Ich habe mein Programm ausprobiert und ich habe festgestellt, dass obwohl ich fast alle markiert habe es als Kommentar und alles, was ich tat, war, doppelte Werte in einen Vektor zu schieben, ich habe ein Speicherleck. Ich habe die API in C ++ Referenz gelesen, konnte aber nichts finden. Hier ist der Code:

%Vor%

Und valgrinds Bericht:

%Vor%

Das ist seltsam. Irgendwelche Ideen? Danke

    
yotamoo 10.09.2011, 16:12
quelle

5 Antworten

18

exit() ruft die Destruktoren des aktuellen Bereichs nicht auf, daher kann ein Leck auftreten:

  

(§3.6.1 / 4) Durch Aufruf der Funktion void exit(int); deklariert in <cstdlib> (18.3) wird das Programm beendet, ohne den aktuellen Block zu verlassen und somit keine Objekte mit automatischer Speicherdauer zu zerstören (12.4). Wenn exit aufgerufen wird, um ein Programm während der Zerstörung eines Objekts mit statischer Speicherdauer zu beenden, hat das Programm ein undefiniertes Verhalten.

Verwenden Sie stattdessen:

%Vor%     
orlp 10.09.2011 16:17
quelle
7

Der Vektor verlässt niemals den Gültigkeitsbereich für den Ausgang.

Entfernen Sie einfach den exit() von main und ersetzen Sie ihn durch return 0;

    
Soren 10.09.2011 16:20
quelle
2

Ich glaube nicht, dass Sie ein Speicherleck haben. Wenn Valgrind sagt, dass der Speicher noch erreichbar ist, sagt er dir nicht, dass er durchgesickert ist, aber dass er nicht freigegeben wurde, bevor das Programm beendet wurde. In diesem Fall wurde der Vektordestruktor vor dem Beenden nicht aufgerufen. Versuchen Sie, von main zurückzukommen, anstatt exit aufzurufen ().

    
John Gordon 10.09.2011 16:20
quelle
1

Haben Sie versucht, den gesamten Code außer exit in einen separaten {} -Block zu schreiben?

    
Vlad 10.09.2011 16:18
quelle
0

Sie mussten die Exit-Funktion nicht aufrufen, es wird sofort aus dem Programm herauskommen, hat die OS-Bereinigungsaufrufe nicht aufgerufen.

Verwenden Sie immer die return () not exit ().

    
Vishal Jaiswal 16.01.2012 16:28
quelle

Tags und Links