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
    😃


Anmelden zum Antworten