Speicher freigeben

Jennesta

Erfahrenes Mitglied
Hi,

mir ist nachdem mein Programm durch ein Speicherüberlauf abgebrochen ist aufgefallen, dass ich irgendwo Speicher anfordere, diesen aber nicht wieder freigebe.
Mein Problem ist, dass ich nicht 100%ig weiß, wo dies passiert, da ich nicht nur eigene Funktionen benutze.
Bevor ich mich nun einige Stunden daran setze, diese Quellen zu finden, wollte ich einmal nachfragen, ob nicht sogar VS 2008 die Möglichkeit beim Debuggen hat, mir den ungebrauchten Speicher anzuzeigen, sodass ich auch weiß um welche Zeiger bzw Variablen es sich handelt.

Grüße Jennesta
 
Hallo Jennesta,

das was du suchst nennt sich Leak Detector. Einfach mal nach googeln. Gibt viele für VS. Eine andere Möglichkeit sind Tools, welche die Codemetrik prüfen. Für C++ gibts es z.B. den Refactor Pro.

Gruß
 
Hi.

Der Memory-Profiler ist erst in der VS 2008 Team Edition enthalten soweit mir bekannt ist.

Aber probier doch mal AQTime. http://www.automatedqa.com/products/aqtime/

Das Programm bietet als VS 2008 Add-On so ziemlich alles was man braucht (Laufzeit, Memory, Windows-Resourcen Profiler usw). Es gibt eine Trial-Version ohne Funktionseinschränkungen.

Gru
 
Danke für die Hilfe.
Ich konnte nun schon einige Stellen ausmachen und durch das Stichwort Leak Detection ist mir ein Link aufgefallen, der sich sogar mit den Funktionen befasst, die ich benutzte.

Dazu aber noch eine Frage. Ich arbeite mit OpenCv (falls damit jemand Erfahrung hat noch besser) und habe einige Unterfunktionen, in denen ich Bilder erstelle, etwas mit einem übergebenen Bild mache und zurück springe.
Wenn ich nun normale Variablen erstelle gibt es sie anch der Funktion nicht mehr. Was bei den Bildern passiert weiß ich gerade nicht genau, aber es gibt auf jeden Fall eine Funktion ReleaseImage. Muss diese auf jeden Fall aufgerufen werden oder wäre der Speicher sowieso danach freigegeben? Ich steh da gerade etwas auf dem Schlauch, da ich zugegeben noch nie um sowas gekümmert habe bzgl Speicher freigeben.

Grüße
 
Dazu aber noch eine Frage. Ich arbeite mit OpenCv (falls damit jemand Erfahrung hat noch besser) und habe einige Unterfunktionen, in denen ich Bilder erstelle, etwas mit einem übergebenen Bild mache und zurück springe.
Wenn ich nun normale Variablen erstelle gibt es sie anch der Funktion nicht mehr. Was bei den Bildern passiert weiß ich gerade nicht genau, aber es gibt auf jeden Fall eine Funktion ReleaseImage. Muss diese auf jeden Fall aufgerufen werden oder wäre der Speicher sowieso danach freigegeben? Ich steh da gerade etwas auf dem Schlauch, da ich zugegeben noch nie um sowas gekümmert habe bzgl Speicher freigeben.
Wenn du das C-API verwendest, musst du dich selbst darum kümmern, dass der Speicher wieder freigegeben wird (also mit ReleaseImage & co.). Beim C++-API kann man die Speicherverwaltung dagegen automatisieren.

Grüße,
Matthias
 
Danke für den Hinweis.
Wir haben uns bei dem Projekt nun auf die C Konstrukte aufgrund der Performance geeinigt. Daher bin ich auch nur in der 2.0 Doku von OpenCV unterwegs und habe vermutlich desswegen nie deine verlinkte Seite gesehen.

Ich vermute nun echt, dass ich (wir) in allen bzw vielen Funktionen Zeiger auf Datenbereiche erstellt haben, diese aber nie freigeben.
 
Zurück