Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verständnisfrage offene Arrays, move und setlength

  Alt 6. Apr 2023, 17:32
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.
Peter Below
  Mit Zitat antworten Zitat