Zeiger auf lokale Variable auflösen
-
Tachyon schrieb:
Ja? Also bei mir wird der Speicher angefasst und auf 0xFEEE gesetzt, und nicht der Pointer selbst.
ja, hast recht. ich hab mich an "access violation reading address 0xfeeefeee" erinnert. das war aber ein pointer in einem gelöschten objekt, kein alleinstehender pointer.
-
ich irrte schrieb:
Tachyon schrieb:
Ja? Also bei mir wird der Speicher angefasst und auf 0xFEEE gesetzt, und nicht der Pointer selbst.
ja, hast recht. ich hab mich an "access violation reading address 0xfeeefeee" erinnert. das war aber ein pointer in einem gelöschten objekt, kein alleinstehender pointer.
Ich kann es jetzt auch gerade nicht nachvollziehen, allerdings MSDN delete Operator (C++)
If the operand to the delete operator is a modifiable l-value, its value is undefined after the object is deleted.
"undefined" meint hier wahrscheinlich "indeterminate" in standardesisch.
Was die Standardkonformität dieses Verhaltens angeht, muss ich noch mal recherchieren.
-
Nö, ok, wenn das so im Standard steht dann wird das schon gelten. Krass

Naja, eigentlich eh ziemlich egal, weil man ja sowieso nixmehr mit dem Zeiger machen dürfte. Nichtmal lesen/vergleichen mit einem anderen Zeiger.
-
hustbaer schrieb:
Nö, ok, wenn das so im Standard steht dann wird das schon gelten. Krass :)...
Vielleicht wollten sie damit einer "delete setzt auf 0"-Implementierung die Hintertür auflassen.
Gruß,
Simon2.
-
Auch möglich.
Ich glaube mich zu erinnern dass im Standard irgendwo steht dass man einen Zeiger der auf etwas zeigt was bereits gelöscht wurde, nichtmehr anfassen darf, mit der einzigen Ausnahme dass man ihn überschreiben darf. Und irgendwo las ich mal dass vermutlich die Überlegung dahinter bzw. der Grund dafür jene(r) ist, dass es Plattformen gibt bzw. geben könnte, wo bereits das Laden eines ungültigen Zeigers in ein Register zu einem Problem führen könnte. (Weil es z.B. das Segment bzw. die Seite auf die der Zeiger verweist garnichtmehr gibt, und eine Gültigkeitsprüfung schon beim Laden in ein Register erfolgt, nicht erst bei der Dereferenzierung.) Auf solchen Plattformen wäre es dann einfach doof für die Compiler Entwickler wenn es erlaubt wäre den Wert nach einem delete noch anzufassen.
Da man den Wert also nichtmehr anfassen darf kann man im Standard auch gleich sagen er ist danach undefiniert, weil's ja eh egal ist -- "legal" kann man ja eh nixmehr damit machen.