So, nun habe ich mich schlau gemacht, bekomme aber beim schließen meines Programme eine Fehlermeldung "Zugriffsverletzung"..wo liegt mein Fehler:
Delphi-Quellcode:
Type
PEintrag = ^TEintrag;
TEintrag = Record
Vorgaenger: PEintrag;
Wert: integer;
Nachfolger: PEintrag;
End;
Type
TListe = Array Of PEintrag;
PListe = ^TListe;
Type
TForm1 = Class(TForm)
LBOutNumber: TListBox;
EdGetNumber: TEdit;
BtBeenden: TButton;
BtSort: TButton;
BtHinzufuegen: TButton;
private
Liste: PListe;
Eintrag: PEintrag;
Procedure AddElement(Wert: integer);
Procedure FreeKette;
End;
Var
Form1: TForm;
First: PEintrag; //Anfang der Kette als globale Variable
Implementation
{$R *.dfm}
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Liste := Nil;
New(Liste);
End;
Procedure TForm1.FormDestroy(Sender: TObject);
Var
i: integer;
Begin
For i := Low(Liste^) To High(Liste^) Do
Dispose(Liste^[i]);
Dispose(Liste);
FreeKette;
End;
Procedure TForm1.BtHinzufuegenClick(Sender: TObject);
Begin
Try
AddElement(StrtoInt(EdGetNumber.Text));
EDGetNumber.Clear;
Except
ShowMessage('Nur Zahlen bitte');
EDGetNumber.Clear;
End;
End;
Procedure TForm1.AddElement(Wert: integer);
Var
hlp, hlp2: PEintrag;
Begin
//Anfang vorhanden ?
If (FIRST = Nil) Then Begin
New(First);
First^.Vorgaenger := Nil; //Der Anfang der Kette hat keinen Vorgänger;
First^.Nachfolger := Nil; //Der Nachfolger ist auch erstmal nicht vorhanden.
hlp2 := First;
End Else Begin
hlp := First;
While (hlp^.Nachfolger <> Nil) Do
hlp := hlp^.Nachfolger;
new(hlp^.Nachfolger);
hlp2 := hlp^.Nachfolger;
hlp2^.Vorgaenger := hlp;
End;
hlp^.Wert := Wert;
End;
Procedure tForm1.FreeKette;
Var
wrk: PEintrag;
Begin
wrk := First^.Nachfolger;
While (wrk <> Nil) Do Begin
Dispose(first);
first := wrk;
wrk := wrk^.Nachfolger;
End;
Dispose(first);
End;
End.