AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointeradresse auslesen

Ein Thema von paul.kunig · begonnen am 11. Sep 2019 · letzter Beitrag vom 21. Sep 2019
Antwort Antwort
Seite 3 von 3     123   
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Pointeradresse auslesen

  Alt 13. Sep 2019, 12:02
Zuerst einmal Danke für die vielen Antworten.

Jedoch lüftet sich der Schleier nur sehr langsam.

IntToStr(Eingabe^) = Dereferenzierung des Zeigers. Ausgabe des unter der Adresse abgelegten Wertes.

IntToStr(Integer(Eingabe)) // Erwartete Ausgabe
Welche Ausgabe? Es handelt sich um einen Zeiger!

IntToStr(Integer(@Eingabe)) Adresse auf dem Stack.
Warum Adresse des Stacks? Es geht doch um die Adresse des reservierten Speicherplatzes auf dem Heap!

Meines Wissens nach wird der Heap benutzt, wenn größere Datenstrukturen verwendet werden.
Da der Stack in seiner Größe sehr beschränkt ist, weicht man mit Zeigern auf den Heap aus.

Das heißt doch, dass die lokal angelegte Variable lediglich die Adresse des Zeigers, der auf den Heap zeigt, speichert.

Somit müsste man folgende Werte aus der lokalen Variable auslesen können:
1) Adresse der lokalen Variable auf dem Stack
2) Wert der Variable, der in diesem Fall lediglich die Adresse des Zeigers, der auf den Heap zeigt, darstellt.

Ist diese Adresse 4 bzw.8 Byte groß?
Wenn ja, wofür brauchen wir dann den Zeiger, der ja die gleiche Größe hat?

Nach dieser Aufbereitung komme ich zu folgendem Schluss:
IntToStr(Integer(Eingabe))
gibt die eigentliche Adresse des Zeigers auf den Heap zurück, da dies der abgelegte/gespeicherte Wert in der lokalen Variable ist.

IntToStr(Integer(@Eingabe)) als auch
IntToStr(Integer(Addr(Eingabe)))
gibt die Adresse der lokalen Variable zurück, für die im Stack Speicher reserviert wurde, um die Adresse des Zeigers zu speichern.

Dies kommt mir logisch vor, widerspricht aber der bisherigen Dokumentation, in der gesagt wird, dass @ und Addr() die Adresse des Zeigers wiedergeben.
Abschließend sei gesagt, dass nicht näher erläutert ist, welcher Zeiger gemeint ist, da auch die lokale Variable im Hintergrund lediglich ein Zeiger ist.

Gruß und Danke an alle
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Pointeradresse auslesen

  Alt 20. Sep 2019, 15:28
Nimm statt Integer(MeinZeiger) besser NativeInt(MeinZeiger) oder noch besser dessen Alias IntPtr(MeinZeiger) . Das funktioniert nicht nur unter Win32, sondern auch Win64 und anderen Plattformen.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#23

AW: Pointeradresse auslesen

  Alt 21. Sep 2019, 20:40

Dies kommt mir logisch vor, widerspricht aber der bisherigen Dokumentation, in der gesagt wird, dass @ und Addr() die Adresse des Zeigers wiedergeben.
@ und Addr() liefern beide die Speicheradresse (Pointer) der angesprochenen Variablen.
Mit New(mypointer) reservierst Du Speicher auf dem Heap entsprechend dem Typ auf den mypointer zeigen soll. Weiterhin wird in mypointer die Startadresse des reservierten Speichers abgelegt.

Gruß
K-H

@Sherlock
Gut gebrüllt Löwe. Aber wenn jemand wissen will was es mit Pointern und dem Heap auf sich hat ist das eigentlich positiv zu werten, denn ungesundes Halbwissen auf diesem Gebiet ist tödlich.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (21. Sep 2019 um 20:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz