Registriert seit: 30. Nov 2005
Ort: München
5.773 Beiträge
Delphi 10.4 Sydney
|
Re: Die verkettete Liste
19. Jan 2007, 07: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
|
|
Zitat
|