Ich habe eine TList, mit der ich Dateien miteinander vergleichen möchte.
Items werden so hinzugefügt:
Delphi-Quellcode:
type
TItem = record
FileName: string;
FileSize: integer;
FileMem: Pointer;
end;
procedure TItemList.AddItem(Item: TItem);
var
P: PItem;
begin
New(P); // ***
P^:= Item;
Add(P);
end;
Die Dateien werden so eingelesen:
Delphi-Quellcode:
procedure TForm1.getFiles(const Path, Mask: string);
var
SearchRec: TSearchRec;
Result, R: integer;
Item: TItem;
F: File;
begin
Result:= findFirst(Path+Mask, faArchive, SearchRec);
while Result = 0 do
begin
Item.FileName:= Path+SearchRec.Name;
Item.FileSize:= SearchRec.Size;
AssignFile(F, Item.FileName);
GetMem(Item.FileMem, Item.FileSize); // ***
Reset(F, 1);
BlockRead(F, Item.FileMem^, Item.FileSize, R);
CloseFile(F);
ItemList.AddItem(Item);
Result:= findNext(SearchRec);
end;
findclose(SearchRec);
end;
Verglichen werden die Dateien anschließend mit CompareMem.
Die Liste wird so gelöscht:
Delphi-Quellcode:
procedure TItemList.DelItem(Index: integer);
var
P: PItem;
begin
P:= Items[Index];
FreeMem(P.FileMem); // ***
Dispose(P); // ***
Delete(Index);
end;
procedure TItemList.ClearList;
begin
while Count > 0 do DelItem(Count-1);
end;
Meine Frage ist jetzt, ob das FreeMem in DelItem Blödsinn ist, oder muß mit GetMem angeforderter Speicher auf jeden Fall mit FreeMem freigegeben werden?