Frage zur Speicherverwaltung von char*-Strings
-
Hallo Leute,
ich hab da mal 'ne Frage:
Also wenn ich schreibechar* 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 ^^