Einzelnen Beitrag anzeigen

Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#1

Freigeben einer Pointerstruktur

  Alt 15. Jun 2009, 16:20
Hi,

ich muss sagen das ist das erste mal das ich großartig mit Zeigern in Delphi arbeite, darum auch hier gleich eine Frage, zu der ich nach langem suchen auch keine antwort habe.

Ich habe die Folgende Pointerstruktur:
Delphi-Quellcode:
  PCommands = ^TCommands;
  TCommands = record
    KeyInput : Boolean;
    Input : TInputType;
    Parameter : String;
    Next : PCommands;
  end;

  PMakro = ^TMakro;
  TMakro = record
    TimeStamp : Integer;
    Commands : PCommands;
    Next : PMakro;
  end;
und habe auf einen Button eine ganz kleine Teststruktur angelegt:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  Anchor : PMakro;
begin
  new (Anchor);
  Anchor^.TimeStamp := 10;
  new (Anchor^.Commands);
  Anchor^.Commands^.KeyInput := True;
  FreeMakro (Anchor);
end;
und wollte testen, ob meine Freigabefunktionen funktionieren, sie arbeiten rekursiv und sollen eigentlich die listen von hinten nach vorne zerstören:

Delphi-Quellcode:
procedure TForm1.FreeMakro (Anchor : PMakro);
begin
  if Assigned (Anchor) then
  begin
    if Assigned (Anchor.Commands) then FreeCommands (Anchor.Commands);
    if Assigned (Anchor.Next) then FreeMakro (Anchor.Next);
    dispose (Anchor);
  end;
end;

procedure TForm1.FreeCommands (Anchor : PCommands);
begin
  if Assigned (Anchor) then
  begin
    if Assigned (Anchor.Next) then FreeCommands (Anchor^.Next); // <---- HIER WIRD EINE AV AUSGELÖST
    dispose (Anchor);
  end;
end;
ich hab markiert wo ich eine AV bekomme, kann mir einer sagen was ich falsch gemacht habe?

Danke schonmal

MfG Hybrid666
  Mit Zitat antworten Zitat