Delete[] crasht programm



  • Hi Leute ich hab mir eine kleine Funktion geschrieben das Problem
    dabei ist das delete [] das Programm crasht, nehm ich dies raus
    crasht es nicht mehr ( in VS wird auch delete [] als Grund
    angezeigt weiss jedoch nicht wieso. Wäre nett wenn mir da jemand
    weiterhelfen könnte und mir erklären könnte wieso das passiert.
    Vielen dank im vorraus für die Hilfe.

    char *buffer = new char[128];
    memset( buffer, 0, 128 );
    // clipboard wurde vorher natürlich erfolgreich geöffnet
    EmptyClipboard();
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 128 );
    
    if( hGlobal )
    {		
    	buffer = (char*) GlobalLock(hGlobal);
    	GetDlgItemText( globalhwnd, 2, buffer, 128 );
    
    	GlobalUnlock(hGlobal);
    
    	SetClipboardData( CF_TEXT, hGlobal);
    
    	CloseClipboard();
    }
    else
    {
    	MessageBox( globalhwnd, "Couldnt allocate ram", 0, MB_OK );
    }
    delete [] buffer; // crash
    GlobalFree( hGlobal );
    


  • Wenn der Wert von hGlobal ungleich 0 ist, zeigt buffer nicht mehr auf new char[128], dann darfst du delete[] nicht machen. Damit hast du gleich min. 4 Fehler auf einmal gemacht.
    1. Memory Leak
    2. falsches delete[]
    3. Kein Smartpointer
    4. Falsches Forum



  • Zusätzlich: nachdem du SetClipboardData() aufgerufen hast gehört der Speicherblock dem Clipboard, und du darfst ihn nicht mit GlobalFree freigeben.



  • out schrieb:

    4. Falsches Forum

    Wieso?



  • Hier könnt ihr Fragen rund um Standard-C++ stellen. Dazu gehören auch Fragen zur STL bzw. zur Standardbibliothek.

    Ich glaube nicht, dass HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 128 ); zum Standard gehört. Denke mal ist WinAPI



  • Wobei der erste Fehler um den es hier eigentlich ging sehrwohl rein mit Standard C++ erklärbar und fixbar ist.



  • hustbaer schrieb:

    Wobei der erste Fehler um den es hier eigentlich ging sehrwohl rein mit Standard C++ erklärbar und fixbar ist.

    👍 100% ACK

    Bei einigen hier ist das Universum ja sooooo klein... leider sind diejenigen in der Überzahl oder einfach sehr aktiv... 🙄



  • theta schrieb:

    Bei einigen hier ist das Universum ja so[...] klein

    Was meinst du damit?

    out schrieb:

    Hier könnt ihr Fragen rund um Standard-C++ stellen. Dazu gehören auch Fragen zur STL bzw. zur Standardbibliothek.

    Ich glaube nicht, dass HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, 128 ); zum Standard gehört. Denke mal ist WinAPI

    Ja, aber das ist kein API-Spezifischer Fehler.


Anmelden zum Antworten