Thema: Delphi Pointer - Wie verwenden?

Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Pointer - Wie verwenden?

  Alt 3. Mär 2009, 12:17
Der Fehler liegt in der Methode GetFileByName. Dort wird bei jedem Zugriff eine neue Instanz von TFile erzeugt.
Bei dieser Instanz wird dann Checked gesetzt, nicht bei der Instanz in der Liste.
Zusätzlich entsteht noch ein Speicherloch, da keine Freigabe erfolgt.

Delphi-Quellcode:
function TFiles.GetFileByFileName(FileName: string):TFile;
var
  iFile: Integer;
begin
  for iFile := 0 to Count -1 do
  begin
    if LowerCase(Items[iFile].FileName) = LowerCase(FileName) then
    begin
      Result.Assign(Items[iFile]);
      Exit;
    end;
  end;
  Result := nil;
end;
Die Methode SaveValues würde dann aber in ihrer jetzigen Form zu einer Zugriffsverletzung führen,
wenn deren Inhalt nicht mit der dargestellten Listbox übereinstimmt.

Delphi-Quellcode:
procedure TfrmCookieFiles.SaveValues(FileList: TFiles);
var
  i: Integer;
  f: TFile;
begin
  for i := 0 to lstFiles.Items.Count -1 do
  begin
    f := FileList.GetFileByFileName(lstFiles.Items[i].SubItems[1]);
    if Assigned(f) then
      f.Checked := lstFiles.Items[i].Checked;
  end;
end;
  Mit Zitat antworten Zitat