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% ACKBei 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 WinAPIJa, aber das ist kein API-Spezifischer Fehler.