Speicherleck bei GetDC()?
-
Hallo an alle!
Ich schreib grad mein zweites MFC Programm für die UNI und hab jetzt folgendes Problem:
Folgende Funktion wird mit einem Timer alle 50ms aufgerufen:
CDC *pDC=GetDC() if (!pDC) return; CString titel; pDC->TextOut(10,10,titel);Jetzt hab ich aber bemerkt dass der Speicherbedarf meiner Applikation rasant zunimmt immer wenn diese Funktion ausgeführt wird.
Kann mir jemand sagen ob ich den pDC zerstören muss und wenn ja wie?
Oder an was kann das sonst noch liegen?Für jede Hilfe wäre ich super dankbar!!!
-
CString title wird natürlich noch was zugewiesen!
title="Hallo";
-
Hallo,
Kann es sein, das Du ReleaseDC vergessen hast?
Oli_1977
-
Ja super genau das wars!
Könntest du mir vl. noch genau sagen was ReleaseDC macht?
-
Hallo,
damit gibst Du den DC für andere Anwendungen wieder frei.
Wenn Du das icht tust ist der Speicher für Deinen DC reserviert. Wird aber von Dir nicht mehr freigegeben. Du hollst Dir also immer neuen Speicher ohne ihn freizugeben.Oli_1977
-
Normalerweise benötigt man GetDC nicht.
Pack das, was Du anzeigen möchtest in Diene Paint/OnDraw Routnine und gut ists.Ich vermute eher Du hast die Prinzipien wie in Windows Daten angezeigt werden nicht verstanden.
-
Ja dann nochmal Danke für die schnellen Antworten!
Bin von diesem Forum echt begeistert.
-
Is wahrscheinlich genau so blöd von mir aber wenn ich mit
CTestDoc *pDoc=GetDocument() einen Zeiger hole wie kann ich diesen wieder frei geben?
-
Martin Richter schrieb:
Ich vermute eher Du hast die Prinzipien wie in Windows Daten angezeigt werden nicht verstanden.
Stimmt. Ändere doch nur deine Daten per Timer und veranlasse das Neuzeichnen der GUI. Die Zeichenmethoden stehen, wie Martin schon sagte, in der OnDraw()/OnPaint().
GetDocument() wind ja in der Regel in Memberfunktionen (z.B. OnButton, ...) deiner View-Klasse verwendet. Wenn die Funktion verlassen wird dann existiert auch der Zeiger auf das Doc nicht mehr.