Hallo Leute,
meine Frage ist kurz und deutlich glaube ich:
Ich habe mal mein Programm mit "top" beobachtet, und dabei stellte ich fest, dass mein Programm irgendwo speicher reserviert aber nicht frei gibt.
Nun die Frage: Gibt es da irgendwleche Methoden solche Fehler zu finden?
Ich arbeite unter Ubuntu (Linux) und benutze Code::Blocks als IDE.
Danke im Voraus.
Memory leaks
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Memory leaks
Ich habe unter C früher eigene Alloc und Free-Funktionen benutzt. Heute würde ich operator new und delete mit einem Macro ersetzen.Kmitska hat geschrieben:Nun die Frage: Gibt es da irgendwleche Methoden solche Fehler zu finden?
Für den Speicher habe ich dann einen Grund angegeben, wo und warum ich Speicher angefordert habe. Diese Zeiger habe ich in eine statische Liste eingesetzt und beim Löschen dort wieder entfernt.
Am Ende des Programms habe ich mir ausgeben lassen, was ich nicht freigegeben habe.
Heute kannst Du dies auch mit Valgrind lösen - dafür fehlt Dir natürlich da die Begründung, aber die ergibt sich in der Regel aus der Position im Quelltest.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Memory leaks
Die eben beschriebene Methode habe ich auch schon oft gesehen. Wenn es nicht ganz so detailliert sein soll, kann man auch einfach einen Zähler mitlaufen lassen. Dieser wird dann beim Anfordern inkrementiert und beim Freilassen dekrementiert. Am Ende des Programms muss dann 0 raus kommen, ansonsten wurde etwas nicht freigegeben. Um die genaue Position im Quellcode ausfindig zu machen, ist die Methode von Xin natürlich aller erste Sahne.
Re: Memory leaks
Zur Analyse, welcher Speicher nicht freigegeben wird, kann das Programm valgrind benutzt werden. Sollte sich im Ubuntu-Repository befinden. Dein Executable einfach als Parameter angeben: valgrind ./meinprog und dann die Zusammenfassung lesen. Da gibt es dann auch Tipps, wie du genauere Informationen herausbekommen kannst.
Und immer schön die Debugsymbole drin lassen
Und immer schön die Debugsymbole drin lassen
