Wenn ich den Befehl "New" zum Erzeugen eines Pointers auf mein Record öfter aufrufe - sagen wir mal 2x - , und beim Beenden des Programms den Befehl
"Dispose" verwende bekomme ich ein "Speicherleck".
Ich kann aber nur 1x "Dispose" aufrufen weil danach ist die Variable ja schon frei, ein erneuter Aufruf von Dispose führt zu einer Exception.
Ich muss aber öfter ein "new" machen damit ich mehrere records von diesen Typ habe.
Das ganze sieht so aus :
Code: Alles auswählen
TForm1 = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
Type
pLanguageInfo = ^tLanguageInfo;
tLanguageInfo = Record
Path:String;
Name:String;
Date:String;
Hint:String;
end;
var
Form1: TForm1;
Test : pLanguageInfo;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Dispose(Test);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
New(Test);
Test^.Path:='123';
Test^.Name:='1.Eintrag';
New(Test);
Test^.Path:='456';
Test^.Name:='2.Eintrag';
end;
Heap dump by heaptrc unit
894 memory blocks allocated : 1544101/1545688
893 memory blocks freed : 1544085/1545672
1 unfreed memory blocks : 16
True heap size : 622592
True free heap : 622496
Should be : 622512
Call trace for block $B7FC7C20 size 16
$080878CC
$08086D30
$0806FFE6
$081C75E0
$08088707
$081D24E6
$081C5369
$081C52D1
Wenn ich nur 1x new mach und danach das dispose bekomme ich kein Speicherleck.
Was mache ich da bitte falsch ?