new und delete
-
Hallo,
warum funktioniert folgendes nicht?
typedef struct _VALUE{ char *ValueName; } VALUE; VALUE *v; v = new VALUE; v->ValueName = new char[strlen("Hallo")]; delete v->ValueName; // Hier gibts ein Fehler delete v;
-
Ich sehe da nur einen Grammatikfehler. Wie lautet denn die Fehlermeldung?
-
Dein Code ist C++, also bitte veschieben @ mod..
-
DAMAGE: after Normal block (#247) at 0x002f6d88
-
es müsste delete[] v->ValueName; heißen. aber das sollte eigentlich nicht den absturz verursacht haben
-
Stimmt das mit delete [] aber ich
habe herausgefunden das wenn ich von
Debug auf Release stelle der Speicher
wunderbar freigräumt wird. Aber warum?Ich benutze VC++ 6.0
[ Dieser Beitrag wurde am 02.07.2003 um 12:00 Uhr von SaM editiert. ]
-
du hast die entscheidende Zeile, nämlich wo du "Hallo" in valuename reinkopierst, vergessen. "Hallo" belegt 1 Byte mehr Speicherplatz als du reserviert hast, da das abschließende NUL-Zeichen von strlen nicht mitgezählt wird.
-
Verdammt, du hast vollkommen recht.
Man ein so simpler Fehler.danke an alle
Muss also so lauten:
typedef struct _VALUE{ char *ValueName; } VALUE; VALUE *v; v = new VALUE; v->ValueName = new char[strlen("Hallo")+1]; delete [] v->ValueName; delete v;
[ Dieser Beitrag wurde am 02.07.2003 um 12:25 Uhr von SaM editiert. ]