Frage zur Speicherverwaltung von char*-Strings



  • Hallo Leute,
    ich hab da mal 'ne Frage:
    Also wenn ich schreibe

    char* Text = "Text";
    

    macht der Compiler daraus doch

    char* Text = new char[5];
    Text[0] = 'T';
    Text[1] = 'e';
    Text[2] = 'x';
    Text[3] = 't';
    Text[4] = '\0';
    

    Folglich müsste man doch, wenn die Variable Text z.B. dem Text eines Buttons dient und man den verändern will, nicht einfach

    char* Text = "Text";
    Text = "anderer Text";
    

    schreiben sondern

    char* Text = "Text";
    delete[] Text;
    Text = "anderer Text";
    

    denn sonst gäbe es ein Speicherloch. Ist meine Überlegung richtig?



  • Nein! Du kannst (und sollst) kein Stringliteral löschen.



  • Mr Train schrieb:

    Folglich müsste man doch, wenn die Variable Text z.B. dem Text eines Buttons dient und man den verändern will, nicht einfach

    char* Text = "Text";
    Text = "anderer Text";
    

    schreiben sondern

    char* Text = "Text";
    delete[] Text;
    Text = "anderer Text";
    

    denn sonst gäbe es ein Speicherloch. Ist meine Überlegung richtig?

    Nein - ist sie nicht...

    char *Text = "Text";
    //wird zu:
    const char *symbol_1 = "Text";
    char *Text = const_cast <char *> (symbol_1);
    

    und genau deshalb gibt es std::string:

    #include <string>
    
    std::string Text = "Text";
    Text = "anderer Text";
    

    bb

    edit: const_cast <char*> hinzugefügt



  • unskilled schrieb:

    [...]

    Du hast den const_cast vergessen, der (leider) implizit durchgeführt wird.



  • Tachyon schrieb:

    unskilled schrieb:

    [...]

    Du hast den const_cast vergessen, der (leider) implizit durchgeführt wird.

    Danke. Hab ihn mal ergänzt ^^


Anmelden zum Antworten