Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

FreeMem vs. Dispose bei TList of Record

  Alt 6. Sep 2011, 18:06
Delphi-Version: 2007
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?
  Mit Zitat antworten Zitat