Frage zu delete



  • Wenn ich Speicher anfordere z.B

    char *test= new char[4];
    

    reicht es einfach

    delete test;
    

    aufzurufen, oder muß ich noch die 4 (Länge des erzeugten char*) irgendwie mit angeben?



  • Das reicht:

    delete [] test;
    

    Man beachte das "[]".

    grüße



  • wenn mit

    new [] alloziiert mit delete [] löschen
    new alloziiert mit delete löschen

    auf keinen fall die beiden mischen. das führt zu nicht definiertem verhalten.



  • ConfusedGuy schrieb:

    auf keinen fall die beiden mischen. das führt zu nicht definiertem verhalten.

    Das stimmt nit ganz...

    Wenn du mit XXX = new Typ[...] allokierst und mit delete XXX; löscht, wird lediglich der erste Speicherblock gelöscht, also XXX[0] 😉 .

    EDIT: Was nat. nicht sinnvoll ist...da ja nicht freigegebner Speicher verbleibt...



  • CodeFinder schrieb:

    Wenn du mit XXX = new Typ[...] allokierst und mit delete XXX; löscht, wird lediglich der erste Speicherblock gelöscht, also XXX[0] 😉 .

    Auch wenn ein Compiler solch ein Verhalten zeigt, es bleibt undefiniert.

    5.3.5/2 schrieb:

    In the first alternative (delete object), the value of the operand of delete shall be a pointer to a non-array object or a pointer to a sub-object (1.8) representing a base class of such an object (clause 10). If not, the behavior is undefined.



  • CodeFinder schrieb:

    Wenn du mit XXX = new Typ[...] allokierst und mit delete XXX; löscht, wird lediglich der erste Speicherblock gelöscht, also XXX[0] 😉 .

    Ist imho quatsch, da dies vollständig von der Freispeicherverwaltung abhängt. Die meisten bieten (selbst wenn es u.U. möglich wäre) gar keinen Mechanismus an um ein Teil am Anfang eines am Stück allokierten Blocks freizugeben.


Anmelden zum Antworten