Einzelnen Beitrag anzeigen

Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Pointer of Array of Pointer neues Prinzip

  Alt 9. Dez 2011, 09:41
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.
  Mit Zitat antworten Zitat