Programmabsturz bei delete
-
hallo,
ich habe eine funktion, die ein Item eines modalen Dialogfensters updaten soll:
CWnd* DlgHandle = new CWnd; DlgHandle = CWnd::GetActiveWindow(); m_sComName = "text"; DlgHandle->SetDlgItemText(IDC_SDISPCOM, m_sComName); DlgHandle->UpdateWindow(); delete DlgHandle;
allerdings beendet das gesamte Programm, falls delete DlgHandle aufgerufen wird mit der Fehlermeldung: "User called Breakpoint from code at 0x...", und im Debug-Modus steht: "Invalid Address specified to RtlValidateHeap( 2f0000, 12f7a8 )".
falls delete DlgHandle nicht aufgerufen wird, läuft das fehlerfrei, allerdings mit einem unguten gefühl meinerseits.
Hat irgendeiner eine idee, woran das liegen könnte?
vielen dank schonmal,
daniel
-
daniel12345 schrieb:
CWnd* DlgHandle = new CWnd; DlgHandle = CWnd::GetActiveWindow();
Mal ein ähnliches Stück Code:
int a = 2; a = 5;
Was passiert mit der 2? Richtig, die ist weg.
Das gleiche passiert mit dem Zeiger, den du durch new bekommst.Du kannst hier komplett auf new/delete verzichten.
-
also so:
daniel12345 schrieb:
CWnd DlgHandle; DlgHandle.GetActiveWindow(); m_sComName = "text"; DlgHandle.SetDlgItemText(IDC_SDISPCOM, m_sComName); DlgHandle.UpdateWindow();
?
da stürzt es mit einer debug assertion failed beiDlgHandle.SetDlgItemText(IDC_SDISPCOM, m_sComName);
ab
-
daniel12345 schrieb:
also so?
Nein. Du sollst nur auf new und delete verzichten, nicht aus CWnd* CWnd machen.
-
danke, so hats geklappt.