char Zeiger loeschen
-
Hallo,
kann mir jemand sagen was der Grund dafür ist dass ich den Speicher den 'text'
referenziert nicht loeschen kann.
Ich weiss dass sich die Adresse die 'text' speichert nach der Zuweisung von 'kjkj'
ändert. Aber warum??char* text = new char[5];
text = "kjkl";
delete[] text;Grüsse
-
Hallo,
der text "kjkl" ist ein String-Literal und liegt daher im statischen Speicher.
Wenn du der Variable den text zuweisen möchtest must du eine Stringkopierfunktion
verwenden. z.B.lstrcpyn(text, "kjkl", sizeof(text) / sizeof(text[0])));
-
Danke für die Antwort, so klappts.
Ich verstehs trotzdem nicht so recht.
Wieso kann sich denn die Adresse des Zeigers einfach so ändern.
Bitte erklärt es mir ganz langsam
-
Mit der Zeile
text = "kjkl";
kopierst du nicht, wie beabsichtigt, die Zeichenfolge in deine neu angelegte Variable,
sondern änderst nur deinen Zeiger auf das String-Literal. Da ein
Zeiger auch nur ein Variaable ist, kannst du ihm natürlich jederzeit eine
beliebige Adress zuweisen. Nicht alle Adressen sind natürlich sinnvoll weil du
nicht (Schreib-)Zugriff auf den gesamten 4GB Adressraum deines Prozess hast.Achtung dein Code hat einen bösen Fehler, weil du nach umsetzen des Zeigers versuchst den Speicher
dieser Zeichenfolge, den du ja nicht allokiert hast, freizugeben. Vielleicht ignoriert dein Compiler das ja
bei String-Literalen, das solltest du dennoch in keinem Fall tun.mfg JJ