Memory leaks

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Memory leaks

Beitrag von Kmitska » So Okt 14, 2012 8:25 am

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Memory leaks

Beitrag von Xin » So Okt 14, 2012 10:53 pm

Kmitska hat geschrieben:Nun die Frage: Gibt es da irgendwleche Methoden solche Fehler zu finden?
Ich habe unter C früher eigene Alloc und Free-Funktionen benutzt. Heute würde ich operator new und delete mit einem Macro ersetzen.
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.

Chris
Beiträge: 7
Registriert: Sa Okt 13, 2012 6:48 am

Re: Memory leaks

Beitrag von Chris » Di Okt 16, 2012 9:16 am

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.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Memory leaks

Beitrag von oenone » Mi Okt 17, 2012 1:26 pm

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 :P

Antworten