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
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%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 ().
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 ().
Tags und Links memory-leaks memory c++ valgrind