Ich bin auch gerade dabei mich mit Listen zu beschäftigen.
Ich habe versucht das wie folgt umzusetzen, orientiert an dem Code über mir:
Delphi-Quellcode:
PZahl = ^TZahl;
TZahl = record
Item : Integer;
Next : PZahl;
end;
type
TintList = class
Zahl : TZahl;
PFirst : PZahl;
constructor Create;
procedure Add(Int: Integer);
//procedure Delete(Index: Integer);
//function Get(index: Integer): Integer;
end;
...
constructor TintList.Create;
begin
inherited Create;
Zahl.Item := 0;
Zahl.Next := nil;
PFirst := @Zahl;
end;
...
procedure TintList.Add(int: Integer);
var
Digit: PZahl;
Silk : PZahl;
begin
//Silk := PFirst^.next; <-- IST FALSCH!!!!
Silk := PFirst;
If Silk <> nil Then
while (Silk^.Next <> nil) do
Silk := Silk^.next;
New(Digit);
Digit^.Item := int;
Digit^.Next := nil;
Silk^.Next := Digit; /// <--- Hier WAR er abgestürzt jetz gehts wieder...
end;
Nur wenn ich eine Zahl zu der Liste hinzufügen möchte, stürzt er Mit EAccessViolation ab.
. An der Adresse 00000004 kann er nicht schreiben steht dann zusätzlich da.
Aber eigentlich sollte die Routine einfach das letzte Element finden, was dann ja Silk sein soll. Und das darf unmöglich auf 00000004 zeigen.
Wie kann das denn sein. Ich blic da nich durch
EDIT: Habs rausgefunden. Ich habe es oben korrigiert und die falsche Zeile auskommentiert.