Thema: Delphi Die verkettete Liste

Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Die verkettete Liste

  Alt 19. Jan 2007, 06:35
Delphi-Quellcode:
procedure TParameterlist.AddAtEnd(Name, DataType: string);
var param: TParameter; NewItem: PItem;
begin
  param := TParameter.Create(Name,DataType);
//If list is still empty
  if (FFirst = nil) then
  begin
    New(NewItem);
    NewItem.Data := param;
    FFirst := NewItem;
    FCurrently := FFirst;
  end
  //list just has content
  else begin
    SetPointerAtPosition(High);
    New(NewItem);
    NewItem.Data := param;
    NewItem.Next := nil;
    FCurrently.Next := NewItem; // Punkt (1)
  end;

  inc(FCount);
end;

procedure TParameterlist.SetPointerAtPosition(index: integer);
var i: integer;
begin
  if (index <= High) then
  begin
    FCurrently := FFirst; // was passiert hier wenn FFirst = nil ist
    i := 0;
    while (i < index) do
    begin
     FCurrently := FCurrently.Next; // Punkt(2), weil hier FFirst in s Nirvana zeigt
      inc(i);
    end;
  end;
end;


procedure TParameterlist.Clear;
var ptemp1,ptemp2: PItem;
begin
  if (FCount > 0) then
  begin
    ptemp1 := FFirst;
    while (ptemp1 <> nil) do
    begin
      ptemp2 := ptemp1.Next;
      Dispose(ptemp1);
      ptemp1 := ptemp2;
    end;
    FFirst:=nil; // damit machst Du deutlich, das die Liste leer ist
    FCurrently:=nil; // Du setzt FCurrently nicht auf nil und verursachst dann bei Punkt (1)und (2) eine AV
    FCount := 0;
  end;
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat