Fragen zu Zeiger im Debuger



  • Wenn ich folgendes mache:

    HBITMAP *hBitmap = NULL;
    hBitmap = new HBITMAP;
    

    Und dann im Debuger auf hBitmap gehe und dort Strg+F5 (Untersuchen) betätige, dann bekomme ich ungefähr folgende Anzeige.

    hBitmap 0000D242 : 0000F346

    Die erste Zahl ist wohl der Zeiger aber die 2te?

    Wenn ich dann weiter im Code folgendes mache.

    hBitmap = CreateBitmapIndirect( CONST BITMAP *lpbm // pointer to thebitmap data );
    
    delete hBitmap;
    

    Dann sieht das Untersuchen nach der ersten Zeile z. Bsp. so aus:

    hBitmap 0000D242 : 0000C222

    Wieso ändert sich die 2te Zahl, ich dachte die erste wäre der Zeiger.
    Und wenn ich anschließend delete, habe ich dann ein Speicherleak? Weil, die 2te Zahl die vorher da stand ist ja nicht mehr dort?

    Sorry, wenns blöde Fragen sind aber das ist mir erst heute mal aufgefallen.



  • Na wenn du hBitmap etwas zuweist, dann muss sich ja wohl auch sein Inhalt ändern.
    Abgesehen davon, frage ich mich was du hier machen willst. Soweit ich weiss liefert CreateBitmapIndirect ein BitmapHandle zurück (also keinen Pointer auf ein BitmapHandle sondern ein Handle auf den für das Bitmap vereinbarten Speicherplatz). Du brauchst doch für hBitmap keinen Speicherplatz vereinbaren.
    Mit delete hBitmap würdest du auch dein Bitmap nicht löschen, sondern nur den Speicherplatz wo das Handle drauf war.
    Ein so erzeugtes Bitmap musst du (glaube ich) mit DeleteObject(hBitmap) löschen. Aber frag mal lieber im WinAPI Forum nach.

    Ciao



  • Ja ne stimmt, so hatte ich das auch net, hab nur jetzt beim schnellen tippen das sternchen vor hBitmap vergessen. Also, ist das zweite hinter dem Doppelpunkt der Inhalt, dann ist das ja schon alles was ich wissen wollte.

    Und jetzt wo du's sagts, da habe ich wohl mal wieder den Wald vor lauter Bäumen nicht gesehen - da sind bestimmt die vielen Aspirin schuld.


Anmelden zum Antworten