immer noch hilflos mit delete[] !!
-
hi,
ich hatte das schon vor ein paar wochen gepostet, aber es hat sich nicht geklärt:
ohwohl es ja scheinbar kein problem sein sollte!für "read" auf netzerk brauch ich ein:
char *zeichenKette = new char(eineGroesse); //dann schreib mit read(..) //dann lesen mit: stringstream sStream(.. ::in | .. ::out); //pseudocode sStream << zeichenKette; sStream >> irgendwohin; //alles soweit schoen, aber nun: delete[] zeichenKette; //crash. was soll das?
ist mir schleierherhaft.. jeden speicher bekomm ich frei, aber keinen "char*".
einer ne idee? hat das irdenwass mit "stream" oder "string" zu tun?
vielen dank!
P.K.
-
Du allokierst in dieser Zeile:
char *zeichenKette = new char(eineGroesse);
genau Speicher für einen char, wobei der Speicher mit dem Wert von eineGroesse initialisierst. Um diesen Speicher wieder freizugeben, musst du delete zeichenKettte; ausführen und NICHT delete[].
Um Speicher für mehrere Chars anzufordern musst du schreiben:char *zeichenKette = new char[eineGroesse];
Dann funktioniert auch dein delete[]
Die Regel is ganz einfach:
new -> delete
new[] -> delete[]
-
Hi!
Es muss
char *zeichenKette = new char[eineGroesse];
und nicht:
char *zeichenKette = new char(eineGroesse);
Runde klammern initialisieren den reservierten Speicher, dieser ist für genau 1 Zeichen (char). Eckige Klammern reservieren einGroesse*sizeof(typ) Speicherblöcke, also ein Array.
EDIT: Zu spät....
Code-Hacker
-
man sollte nach 9 stunden na pause machen.
okay.
soweit zum Thema: man lernt aus fehlern. denkste.danke nochmal.
-
PointerKid schrieb:
man sollte nach 9 stunden na pause machen.
Joa, oder nen Kaffee trinken . Ich habe genau den selben blöden Fehler irgendwann auch mal in nem fremden Code gehabt. Schwer zu finden...