Einzelnen Beitrag anzeigen

scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#7

Re: TList Zugriffsverletzung ...

  Alt 15. Okt 2004, 10:22
Der Hauptfehler liegt bei TFunctionList.getFunction(). Dann würde ich noch statt ^TFunction ein PFunction definieren:
Delphi-Quellcode:
type
  //...
  PFunction = ^TFunction;
  TFunction = class(TObject)
  private
  //...
Delphi-Quellcode:
function TFunctionList.getFunction(i : Integer) : TFunction;
var
  aFunction : PFunction;
begin
  aFunction := FFunctions.Items[i];
  result := aFunction^;
end;

Desweiteren würde ich noch addFunction() ändern um Konflikte zu vermeiden, wobei sich Destroy und deleteFunction() dann auch ändert:
Delphi-Quellcode:
destructor TFunctionList.destroy();
var
  aFunction : PFunction;
  i : Integer;
begin
  inherited destroy;
  // Alle wieder freigeben...
  for i:=0 to FFunctions.Count-1 do
  begin
    aFunction := FFunctions.Items[i];
    aFunction^.Destroy; // Funktion freigeben
    Dispose(aFunction);
    FFunctions.Delete(i);
  end;
  FreeAndNil(FFunctions);
end;

function TFunctionList.addFunction: TFunction;
var
  aFunction : PFunction;
begin
  New(aFunction);
  with aFunction^ do
  begin
    aFunction^ := TFunction.Create; // Funktion erstellen
  end;
  FFunctions.Add(aFunction);
  result := aFunction^;
end;

procedure TFunctionList.deleteFunction(Value: Integer);
var
  aFunction : PFunction;
begin
  aFunction := FFunctions.Items[Value];
  aFunction^.Destroy; // Funktion freigeben
  Dispose(aFunction);
  FFunctions.Delete(value);
end;
Desweiteren solltest du noch bei TFunction und TFunctionList den Destroy mit override deklarieren.
  Mit Zitat antworten Zitat