chars löschen oder nicht?



  • Hoi Hoi,

    Ich bin auf ein Problem gestoßen.

    Folgendes: Ich habe eine Methode aus einer Bibliothek, diese nimmt ein const char* Argument an.

    Jetzt besitze ich aber ein char array, das ich angelegt hatte mit:

    char *p = new char[30];

    Wenn ich den Pointer nun übergebe, muss ich das denn noch löschen? Und wenn ja, wann? Kann ich folgendes machen:

    die_funktion(p);
    delete(p);

    oder muss ich warten, bis "die_funktion" nicht mehr auf den Speicherplatz zugreift? Ich danke euch viemals.

    Bis dann.

    donnerCobra



  • Ja, du musst dieses Array natürlich noch löschen.

    Grundsätzlich musst du warten bis die_funktion(p) nicht mehr auf diesen Speicher zugreift, das ist aber hier:

    die_funktion(p);
    delete p;
    

    der Fall. die_funktion(p) ist zum Zeitpunkt des delete ja bereits beendet.

    Einzig und allein aufpassen musst du bei asynchronen Aufrufen, bspw. wenn du einen die_funktion(p) als Thread startest, etc. ... denke aber, soweit bist du noch nicht.

    MfG SideWinder



  • ACHTUNG!!!

    wenn du new [] zum alloziieren verwendest, musst du auch delete [] zum freigeben nutzen!

    also:

    // für arrays
    char* buf = new char[40];
    delete[] buf;
    
    // für einzelne instanzen
    foo* bar = new foo();
    delete bar;
    


  • Hallo,

    danke sehr für eure Hilfe. Nunja, das Problem ist, dass die Funktion tatsächlich in einem seperaten Thread ausgeführt wird. Ich habe bisher immer String Klassen benutzt, und dort repräsentiert ja ein Objekt direkt das ganze array, dort fand ich das weniger als Problem.

    Aber anscheinend muss ich dann tatsächlich alles bis auf den Abbruch des Programmes verschieben. Danke erstmal 🙂

    Und danke für den Hinweis mit delete[]. Das war nur ein schreibfehler. Danke 🙂

    Bye.



  • Frage, wäre es nicht hilfreich, wenn die Doku Informationen enthält, ob dass entsprechende char array intern in der Funktion noch mal kopiert wird?


  • Mod

    donnerCobra2 schrieb:

    Frage, wäre es nicht hilfreich, wenn die Doku Informationen enthält, ob dass entsprechende char array intern in der Funktion noch mal kopiert wird?

    Wozu sollte dich als Funktionsanwender dies interessieren? Die Funktion wird schon hinter sich aufräumen und das Interface wird so sein, dass die Funktion genau die Art von Parameter annimmt die sie braucht. Zumindest wenn der Programmierer der Funktion keinen mist gemacht hat.


Log in to reply