Entwickler-Ecke

Sonstiges (Delphi) - Blockread/-Write mit Pointer?


FinalFantasy - Mo 29.08.05 11:45
Titel: Blockread/-Write mit Pointer?
Ich habe zwei Strukturen A und B.
A enthält einen Pointer auf B.
Wenn ich jetzt A und B mit Blockwrite in eine Datei schreibe, und anschliessend mit Blockread wieder auslese, dann dürfte eigentlich der Pointer in A nichtmehr stimmen, oder?


jasocul - Mo 29.08.05 16:39

Das wäre schon ein ziemlicher Zufall, wenn es noch passen würde. :wink:


Udontknow - Mo 29.08.05 16:52

Hallo

Nein, das muss kein Zufall sein. Globale Variablen beispielsweise sind, solange du das Projekt nicht anpackst, immer am gleichen Ort. Wenn der Record als globale Variable oder auch als Feld beispielsweise in der Hauptform deklariert ist, landet er immer an der gleichen Stelle (solange das Programm nicht geändert wird)... Natürlich macht es nicht viel Sinn, einen Pointer zu speichern, der sowieso schon durch den Code feststeht...

Cu,
Udontknow


jasocul - Di 30.08.05 08:15

Auf einen Pointer auf globale Variablen wäre ich hier gar nicht gekommen. Ich bin eher von einer verketteten Liste von Blöcken ausgegangen... :gruebel:


Udontknow - Di 30.08.05 08:19

Naja, auch da kann die Variable an der selben Stelle erscheinen, wenn der Programmablauf immer derselbe ist...

Cu,
Udontknow


jasocul - Di 30.08.05 08:27

Theoretisch ja, aber verlassen würde ich mich nicht darauf. Aber du schreibst ja selbst "kann"!
Und jede Programmänderung kann dir das durcheinander schmeißen. Wird bestimmt lustig, wenn mann dann versucht die Daten wieder einzulesen. :lol:

Habe mir jetzt nochmal die ursprüngliche Formulierung durchgelesen.
Zitat:
Wenn ich jetzt A und B mit Blockwrite in eine Datei schreibe, und anschliessend mit Blockread wieder auslese...

Wenn man die Daten mit Blockwrite schreibt und danach wieder einliest, ohne das Programm zu verlassen oder Pointer aufzulösen, dürfte es funktionieren.


Udontknow - Di 30.08.05 08:32

Ganz genau. :D Das das Speichern von Pointern aus diesen Gründen nicht sinnvoll ist, versteht sich ja. Ich wollte ja auch nur das Phänomen erklären, das FinalFantasy hatte.

Nachtrag: Wenn er das Programm nicht verlässt bzw die Struktur nicht anderweitig freigibt, ist der Zeiger natürlich erst recht noch gültig.

Cu,
Udontknow