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 frei

    passend 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öglich

    int 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 frei

    passend 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 ;).


Anmelden zum Antworten