![]() |
Re: Record zurücksetzen (löschen)
Hallo,
Zitat:
![]() Gruß Hawkeye |
Re: Record zurücksetzen (löschen)
ups :oops:
Hab aber nicht abgeschrieben, ehrlich :oops: |
Re: Record zurücksetzen (löschen)
Liste der Anhänge anzeigen (Anzahl: 1)
Bei verschachtelten Records läuft das genauso.
Delphi-Quellcode:
Ergebnis : Anhang. In diesem Beispiel ist auch das Finalize völlig überflüssig.
MyRecord : record
nr : Integer; name : string [10]; MyRecord2 : record nr : Integer; name : string [10]; end; end; procedure TForm1.FormCreate(Sender: TObject); begin MyRecord.nr := 1; MyRecord.name := 'XYZ'; MyRecord.MyRecord2.nr := 2; MyRecord.MyRecord2.name := 'XYZ2'; memo2.Lines.Add(IntToStr(MyRecord.nr)); memo2.Lines.Add('*'+MyRecord.name+'*'); memo2.Lines.Add(''); FillChar (MyRecord,SizeOf (MyRecord),0); memo2.Lines.Add(IntToStr(MyRecord.nr)); memo2.Lines.Add('*'+MyRecord.name+'*'); memo2.Lines.Add(IntToStr(MyRecord.MyRecord2.nr)); memo2.Lines.Add('*'+MyRecord.MyRecord2.name+'*'); end; |
Re: Record zurücksetzen (löschen)
Hatten wir nicht gerade, dass bei globalen Variablen mit der Methode ein MemoryLeak auftritt ?!
|
Re: Record zurücksetzen (löschen)
Zitat:
Zitat:
|
Re: Record zurücksetzen (löschen)
Hallo,
noch einmal zur Klarstellung: Bei referenzgezählten Daten (dynamische Strings und Arrays, Interfaces) sollte ein Aufruf von Finalize vorgeschaltet werden, damit die internen Verwaltungsinformationen aufgeräumt werden können. Der Compiler erzeugt dabei einen Aufuf der zugehörigen RTL-Routine, die selbst feststellen kann, welche Felder des Records finalisiert werden müssen. Dies sollte mit beliebig geschachtelten Datentypen funktionieren. "Einfache" Zeiger werden von Finalize nicht zerstört. Bei Referenzen auf Speicherbereiche oder Objekte ist der Programmierer selbst für die Freigabe der referenzierten Objekte verantwortlich. Hierzu wird die komplementäre Routine (GetMem/FreeMem, Create/Free,...) aufgerufen, um den Speicher wieder freizugeben. Einfache Datentypen (Ordinaltypen, Fließkommatypen, kurze Strings(!),...) benötigen keine Aufräumarbeiten. Ein Aufruf von FillChar darf erst erfolgen, nachdem die Verwaltungsdaten ordnungsgemäß aufgeräumt wurden. Beachtet man dies nicht, entstehen Memory Leaks. Gruß Hawkeye |
Re: Record zurücksetzen (löschen)
Zitat:
Delphi-Quellcode:
Und das Ding soll leergemacht werden. Wozu dann soviel Klimbim machen ? Von der Compiler-Direktive $H+ ist nichts zu sehen. Insofern ist das finalize überflüssig und wird sogar vom Linker entfernt.
type
TMyRecord = record Test_1: string; Test_2: string; Test_3: string; Integer_1: integer; Integer_2: integer; end; ... MyRecord: TMyRecord; |
Re: Record zurücksetzen (löschen)
String ist nicht gleich String[10], das ist der Unterschied.
|
Re: Record zurücksetzen (löschen)
Moin Hansa,
Zitat:
Ausserdem sind Huge-Strings auch die Standardeinstellung. Hast Du es bei Dir umgestellt? ;-) |
Re: Record zurücksetzen (löschen)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz