![]() |
Problem mit verketteter Liste
Ich schreibe soeben die Hinzufügen-Routine einer verketteten Liste (TParameterList):
Delphi-Quellcode:
Das Problem ist mit Kommentaren versehen. ;)
type
PItem = ^TItem; TItem = record Data: TParameter; Next: PItem; end; procedure TParameterlist.AddAtEnd(AParameter: TParameter); var NewItem: PItem; begin New(NewItem); //das hier tritt immer wieder ein, auch beim zweiten und dritten mal O_o if (FFirst = nil) then begin showmessage('1'); NewItem.Data := AParameter; NewItem.Next := nil; //warum ist FFirst hier nach immer noch nil? FFirst := NewItem; FLast := NewItem; Dispose(NewItem); end //dieser Block wird NIE durchlaufen else begin showmessage('2'); NewItem.Data := AParameter; NewItem.Next := nil; FLast.Next := NewItem; FLast := NewItem; Dispose(NewItem); end; inc(FCount); end; //vlt. liegt's am constructor irgendwie??? constructor TParameterlist.Create; begin FFirst := nil; FLast := nil; FCurrently := nil; FCount := 0; end; |
Re: Problem mit verketteter Liste
Hi,
da wo Du den Kommentar gesetzt hast, ist die Variable nicht mehr nil. Aber schau dir mal die folgenden Zeilen an und kommentiere was jede dieser Zeilen macht. Gruß Der Unwissende |
Re: Problem mit verketteter Liste
Wo ist FFirst deklariert?
|
Re: Problem mit verketteter Liste
Hallo Koller,
du solltest die mit New() erzeugten Elemente nicht direkt nach dem Einfügen in die Liste freigeben, sonst erhältst du Zeiger, die ins Nirwana zeigen. Den Speicherbereich darfst du erst nach dem Entfernen eines Elements aus der Liste wieder freigeben. Nimm mal die zwei Dispose-Aufrufe aus deinem Code raus und teste erneut. Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz