1. Warum "GetMem(Pt, 0);" ? Wenn du 0 Bytes an Speicher reservieren willst, dann ist der ganze Aufruf hinfällig.
2. Warum arbeitest du überhaupt mit einem Zeiger auf die Struktur? Arbeite direkt mit der Struktur und dann brauchst du dich nicht um Speicher Alloziierung und freigeben kümmern.
Delphi-Quellcode:
procedure DrawIteration(Const Axiom: String; L, Degree: Real;
var Turtle: TTurtle; var ProgBar: TProgressBar);
var
i: Integer;
Pt: TPosition;
begin
ProgBar.Max := Length(Axiom);
for i := 1 to Length(Axiom) do
begin
Application.ProcessMessages;
case Axiom[i] of
'F': Turtle.FD(L);
'f':
begin
Turtle.PU;
Turtle.FD(L);
Turtle.PD;
end;
'+': Turtle.LT(Degree);
'-': Turtle.RT(Degree);
'[':
begin
Pt.x := Turtle.PosX;
Pt.y := Turtle.PosY;
Turtle.PU;
Turtle.FD(250);
Pt.xHlp := Turtle.PosX;
Pt.yHlp := Turtle.PosY;
Turtle.MoveXY(Pt.x, Pt.y);
Turtle.PD;
end;
']':
begin
Turtle.PU;
Turtle.MoveXY(Pt.x, Pt.y);
Turtle.SetHXY(Pt.xHlp, Pt.yHlp);
Turtle.PD;
end;
end;
ProgBar.Position := i;
end;
end;
Das sollte doch eigentlich vollkommen reichen, wenn ich das so richtig überschaut habe. Das einzige mögliche Problem was ich dabei sehe: Es darf niemals eine ] vor einer [ kommen. Wenn dies gewährleistet ist, dann sollte das so funktionieren.