DC und Memory Leak



  • Wenn ich einen mit CreateCompatibleDC erstellten Kontext mit DeleteDC lösche, werden dann auch mit SelectObject über CreateCompatibleBitmap eingesetzte Bitmaps freigegeben? - Vorausgesetzt natürlich die Bitmap selbst habe ich bereits mit DeleteObject freigegeben. Gibt es also irgend welche internen Kopien der Bitmap in der Kontext Struktur, die ich so nicht erwische?



  • Du kannst/darfst keine Objekte löschen, die im DC selektiert sind.
    Merk Dir die ursprünglichen Objekte des DCs und setze die zurück bevor Du löscht. Dann kannst Du Deine Ressourcen Freigeben, z.B.:

    HDC hDC = CreateCompatibleDC( hDC2 );
    HBITMAP hBmpOld = (HBITMAP)SelectObject( hDC, hBitmap );
    ...
    SelectObject( hDC, hBmpOld );
    DeleteObject( hBitmap );
    DeleteDC( hDC );
    


  • Hm, warum muss ich denn hier das überhaupt machen, hDC wird doch gard nicht mehr genutzt(gelöscht),
    Warum muss ich das wieder zurücksetzen?



  • Feaky12 schrieb:

    Hm, warum muss ich denn hier das überhaupt machen, hDC wird doch gard nicht mehr genutzt(gelöscht),
    Warum muss ich das wieder zurücksetzen?

    Weil HDC ein Zeiger auf ein Speicherbereich ist...am adressierten Speicher liegen weitere Verweise (=deine eingesetzten Objekte) damit löscht du die adressierte interne Struktur HDC, aber nicht die weiteren Verweise auf reservierten Speicher in der Struktur.
    HBITMAP ist intern gesehen auch nur ein Zeiger auf ein Struct.

    Nochwas...du kannst auch das machen:

    DeleteObject(SelectObject(hdcMem, hbmpPrevious));
    

Anmelden zum Antworten