problem mit delete
-
Original erstellt von Knuddlbaer:
unsigned char * t = new unsigned char[1024];
delete t;Tippfehler:
unsigned char * t = new unsigned char[1024];
delete [] t;wäre richtig
-
Original erstellt von Shade Of Mine:
**Tippfehler:unsigned char * t = new unsigned char[1024];
delete [] t;wäre richtig**
ich denke nicht, ich mache es auch so, und ich glaube, beide machen genau das Gleiche
-
Merksatz:
Jedes new hat sein delete und jedes new[] sein delete[]!delete gibt ein element frei
delete[] gibt ein array freipassend dazu:
new belegt platz für ein element
new[] belegt platz für ein array
-
ich denke nicht
Schade
ich mache es auch so
Dann machst du's falsch.
und ich glaube, beide machen genau das Gleiche
Dann vertrittst du hier zweifelsfrei einen Irrglaube.
Ein delete (ohne die []) auf Speicher der mit new[] angefordert wurde resultiert in undefiniertem Verhalten (siehe: 5.3.5p2). Dieses undefinierte Verhalten kann sich auf vielfältige Weise ausdrücken. Es kann sogar alles so laufen wie man es sich wünscht.
-
Original erstellt von HumeSikkins:
[quote]ich mache es auch so
Dann machst du's falsch.
[/QB][/QUOTE]
stimmt
ich hae nachgeguckt, man sollte delete[] benutzen. Aber ich bin sicher, ich hab's bei irgendeinem blöden Autor als "delete" gelesen.
Macht nix, dafür seid Ihr da, oder??Grüße
-
Bekomme ich irgendwelche Probleme/Nachteile, wenn ich einfach nie new & delete und immer new[] (mit der Dimension 1) und delete[] verwende?
-
Original erstellt von Daniel E.:
Bekomme ich irgendwelche Probleme/Nachteile, wenn ich einfach nie new & delete und immer new[] (mit der Dimension 1) und delete[] verwende?erst wenn du selbst new überlädst
AFIK
op new benutzt die operator new funktion
und op delete die operator delete funktion
und mit den ist sowas möglichint main() { void * p = operator new( 100 ); //allociert 100 bytes operator delete( p ); // da operator delete von mir nicht verlang das ich ihn die größe angeben // schliesse ich draus das operator new irgend wo die größe abspeichert }
wenn man ein eigenen allocator schreibt und new pro klasse überläd dann kann man diese overhead beseitigen
ps. sicher auf den gebiet bin ich nicht und habe selbt noch fragen, aber macht erstmal mein posting nieder
[ Dieser Beitrag wurde am 24.04.2003 um 00:34 Uhr von Dimah editiert. ]
-
Original erstellt von Daniel E.:
Bekomme ich irgendwelche Probleme/Nachteile, wenn ich einfach nie new & delete und immer new[] (mit der Dimension 1) und delete[] verwende?hast probleme, konstruktorargumente zu übergeben und vermutlich isses auch leicht lahmer.
-
Original erstellt von Shade Of Mine:
**Merksatz:
Jedes new hat sein delete und jedes new[] sein delete[]!delete gibt ein element frei
delete[] gibt ein array freipassend dazu:
new belegt platz für ein element
new[] belegt platz für ein array**Oh man, da will man ein Beispiel geben wie es richtig ist und macht alles falsch was man falsch machen kann O *pfeif*
-
volkard: Jeah, das Konstruktorargumentenargument ein gut :).
Dimah: Über das Überladen hatte ich nachgedacht, den Gedanken aber wegen »das macht doch eh niemand« wieder verworfen. Außerdem überlade ich -- wenn schon -- new[] gleich mit ;).