automatische Speicherallozierung bei (Neu-)Definition
-
Obwohl ich kein Anfaenger bin, war ich verbluefft dass folgendes funktioniert:
void FuBar() { char* ptr; ... ptr = "Schlagmichtot"; ... ptr = "Blah"; ... }Offenbar reserviert er bei jeder Definition automatisch Speicher.
Nur was geht hier genau vor? Was passiert z.B. mit dem Speicher wenn der Gueltigkeitsbereich von ptr verlassen wird?Ist das Ganze ueberhaupt (noch) zulaessig?
Danke fuer Eure Infos!
-
sqrt(-1) schrieb:
...Offenbar reserviert er bei jeder Definition automatisch Speicher....
Nein.
Der Compiler legt für die beiden Literale "Schlagmichtot" und "Blah" Speicher an (also "innerhalb des Object-Files"; der wird beim Programmstart (VOR main()) irgendwo in den Hauptspeicher "gelegt") und lässt den Zeiger ptr mal auf den einen und mal auf den anderen Speicher zeigen.
Erlaubt ist das (und leider sogar, dass ein non-const-Zeiger darauf verweist) - undefiniert wird's erst, wenn darauf geschrieben werden soll.
Gruß,
Simon2.