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...


Log in to reply