Hi!
I have this code which generates a Memory Leak:
TTransactionData = record
GUID : string ;
Name : string ;
Number : QWord ;
StartTime: TDateTime ;
EndTime : TDateTime ;
TimeOut : TTimeOut ; //< In Milliseconds.
RawAnswer: string ;
Owner : TObject ;
end;
TMyObj = cLass(TOBject)
public
Data: TTransactionData;
....
end;
...
...
var
SomeData: TTransactionData;
begin
for i := 1 to CantMsj do begin
FillByte(SomeData, SizeOf(SomeData), 0);
SomeData.StartTime := Now;
SomeData.GUID := AGUID;
SomeData.Name := Format('%S.Pet%D[%D of %D]', [Name, Count, i, MsgCount]); // Memory Leak!!
SomeData.Number := i;
SomeData.TimeOut := MIN_TIME_OUT + Random(MAX_TIME_OUT - MIN_TIME_OUT);
SomeData.RawAnswer := Format('%S-[BEGIN] Transaction "%S".{%S}.%D Created', [StrLog(Now), Name, AGUID, SomeData.Number]); // Memory Leak!!
SomeData.Owner := Self;
ATransa := TTransaction.Create(nil);
ATransa.Name := SomeData.Name;
ATransa.SetData(SomeData);
FList.Add(ATransa);
end; {<--- of "for i" }
end;
And this version don't:
begin
for i := 1 to CantMsj do begin
ATransa := TTransaction.Create(nil);
ATransa.Data.StartTime := Now;
ATransa.Data.GUID := AGUID;
ATransa.Data.Name := Format('%S.Pet%D[%D of %D]', [Name, Count, i, MsgCount]); // No Memory Leak!!
ATransa.Data.Number := i;
ATransa.Data.TimeOut := MIN_TIME_OUT + Random(MAX_TIME_OUT - MIN_TIME_OUT);
ATransa.Data.RawAnswer := Format('%S-[BEGIN] Transaction "%S".{%S}.%D Created', [StrLog(Now), Name, AGUID, ATransa.Data.Number]); // No Memory Leak!!
ATransa.Data.Owner := Self;
ATransa.Name := ATransa.Data.Name;
FList.Add(ATransa);
end; {<--- of "for i" }
end;
Am I doing something wrong?
I'm using FPC 2.4.4 Lazarus 0.9.30 on Linux Ubuntu 10.04 LTS