Problem mit Zeigern
-
Hi,
hab nur gerade festgestellt, dass der folgende Code funktioniert:char *a; a = "Das ist ein Test"; Application->MessageBox(a, "Test", MB_OK);
Meine Frage: Wieso funktioniert, das? Ich habe keinen Speicherreserviert oder den Zeiger auf etwas zeigen lassen! Wo wird der Inhlat abgelegt?
Danke
Alexander Sulfrian
-
hallo,
ich verstehe deine verwunderung nicht so recht warum das funktioniert. warum sollte es deiner meinung nach nicht funktionieren?
den speicher hast du doch reserviert, indem du eine zeigervariable des typs char angelegt hast, und diesen läßt du per schreibzugriff a="xyz" auf eine zeichenfolge zeigen.
der inhalt wird irgendwo im ram abgelegt, das kannst du mit dem adressoperator rausbekommen, wenn du ganz genau wissen willst wo konkret...mfg
m
-
Hi,
muss man da nicht noch irgendwas mit new machen?Danke
Alexander Sulfrian
PS: Ich glaube ich hab heute etwas wenig geschlafen?! Ich versteh irgendwie nichts mehr!
-
Original erstellt von Alexander Sulfrian:
muss man da nicht noch irgendwas mit new machen?doch! Bei deinem Schnipsel überschreibst du unter Umständen fremden Speicher und es führt im dümmsten Fall zu einem Absturz. Wieso sollte es aber nicht gehen? Ein Zeiger ist nichts weiter als eine Adresse. Auf die Adresse kannst du schreiben und lesen soviel du willst...
-junix
-
Soweit ich das mitbekommen hab werden Zeichenfolgen als Konstante im Programm abgelegt.
Hat mich auch mal ziemlich gewundert das es funktioniert, aber funktioniert und ist imho auch ungefährlich.
-
Im Unterschied zu anderen Datentypen ist eine Character - Variable immer ein Zeiger auf den 1. Buchstaben.
Wie oben schon gesagt kann es auf deine Weise passieren, dass du nachfolgende Speicherbereiche überschreibst und dein Programm mit einer schönen Schutzverletzung beendet wird.
Wenn man abschätzen kann, wieviel Zeichen in die Variable geschrieben werden sollen, sollte man immer einen festen Bereich, also als Array, definieren.
Dann ist man auf der sicheren Seite.Ich hoffe, ich konnte helfen.
mfg Aconda