Leak?
-
Also ich wollte mal fragen ob hier ein Memoryleak ist:
// function to print a text on xpos, ypos void CEngine::PrintText(POINT *p, char *szString, COLORREF clrColor) { // private RECT rect; HGDIOBJ hOldObj; // create the font and select it hOldObj = SelectObject(hBBDC, CreateFont(14,0,0,0,0,0,0,0,ANSI_CHARSET,0,0,0,0,"Arial")); SetTextColor(hBBDC, clrColor); SetBkMode(hBBDC, TRANSPARENT); // show SetRect(&rect, p->x , p->y, p->x +100, p->y +100); DrawText(hBBDC, szString, strlen(szString), &rect, DT_LEFT ); // clean up SelectObject(hBBDC, hOldObj); }
Die Funktion wird so aufgerufen:
if(IsDebugging()){ char *szDebugInfo = new char[64]; wsprintf(szDebugInfo, "Debug:\r\nFrames drawn: %d", iFrames); PrintText(&MakePoint(50, 30), szDebugInfo, RGB(99, 88, 77)); delete szDebugInfo; }
Also fallse IsDebugging true ist dann bleibt laut Taskmanager mein Speicherverbrauch nicht konstant sondern steigt an. Achja: Die Funktion wird zum Beispiel 30mal/sec aufgerufen
Hoffe ihr könnt mir helfen
-
Ja, in der Tat ...
So wär's vielleicht sinnvoller:
// clean up DeleteObject (SelectObject(hBBDC, hOldObj));
-
Wenn du new[] benutzt, dann musst du auch delete[] benutzen!
char *szDebugInfo = new char[64]; wsprintf(szDebugInfo, "Debug:\r\nFrames drawn: %d", iFrames); PrintText(&MakePoint(50, 30), szDebugInfo, RGB(99, 88, 77)); delete[] szDebugInfo;
Mich wundert, dass der Code nicht abschmiert...
-
Original erstellt von KPC:
**Wenn du new[] benutzt, dann musst du auch delete[] benutzen!char *szDebugInfo = new char[64]; wsprintf(szDebugInfo, "Debug:\r\nFrames drawn: %d", iFrames); PrintText(&MakePoint(50, 30), szDebugInfo, RGB(99, 88, 77)); delete[] szDebugInfo;
Mich wundert, dass der Code nicht abschmiert...**
Ja ich habs schon gemerkt, danke
Jetzt käuft alles. Hab das mit dem zurückselektieren noch nie richtig verstanden, aber jetzt ists klar!
danke!
cu para