Zitat:
move(x, R, 8);
Wer das macht, gehört eh bestraft.
Das war aber nicht meine Frage. Ich will wissen, ob ein "fillchar" das wie Du sagst zu bestrafende wieder kompensiert oder ob da schon etwas passiert ist.
Wozu hast Du den Debugger? Geh schrittweise durch den Kode und sieh Dir den Inhalt und die Addressen der Variablen an.
Anyway: Wenn Du mit Datentypen arbeitest, für die der Compiler die Speicherverwaltung übernimmt soweit es ums Aufräumen geht, lass die Finger von low-level-Funktionen wie Move und Fillchar. Das betrifft die Typen String (
Ansi und
Unicode), Interfaces, dynamische Arrays, Widestring. Für solche Typen initialisiert der Compiler auch lokale Variablen (auch wenn sie Teil eines Records sind), sorgt bei Kopieroperationen (per Assignment oder Copy bei Arrays) für korrekte Behandlung des reference counts und gibt automatisch den belegten Speicher frei, wenn die Variable out of scope geht. Move und Fillchar umgehen all diese Mechanismen und führen dann zu Speicherlecks und AVs.
Lies den Delphi Language Guide! Der ist Teil der Onlinehilfe und enthält alle Infos über die Implementierung der diversen Datentypen die Du brauchst.