Thema: Delphi Stack overflow

Einzelnen Beitrag anzeigen

Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Stack overflow

  Alt 15. Jun 2008, 16:14
Hallihallo, also ich hab hier so ein Problem.
Zuerst hatte ich eine ganz normale eigene procedure, die sah ungefähr so aus.
Delphi-Quellcode:
procedure tform1.Spurzeichnen(image:timage);
var
i,s,x,y:integer;
begin
i:=1;
s:=0;
while i <= Personenanzahl do
begin
  x:=Daten[i].Ort[0].x;
  y:=Daten[i].Ort[0].y;
  image.Canvas.MoveTo(x,y);
  s:=1;
   while s <= Daten[i].Anzahl do
      begin
         x:=Daten[i].Ort[s].x;
         y:=Daten[i].Ort[s].y;
         image.Canvas.LineTo(x,y);
         s:=s+1;
      end;
  i:=i+1;
end
end;
Daten ist vom Typ TOrte und speichert die einzelnen Positionen aller Orte:
Delphi-Quellcode:
TOrte = record
    Ort:array[0..1000]of Tpoint;
    Anzahl: integer; //Anzahl der Schritte
end;
...
var
Form1: TForm1;
Daten:array[0.1000]of TOrte;
Personenanzahl:integer
Das Programm soll Spur der Personen speichern, hat auch wunderbar geklappt.
Jetzt hab ich noch eine eigene Klasse gebaut, die Datengruppe, um das Programm noch etwas zu verallgemeinern:
Delphi-Quellcode:
TDatengruppe = record
      Daten:array[0..1000]of TOrte;
      Personenanzahl: integer;
end;
...
var
Form1: TForm1;
Datengruppe1:Tdatengruppe
somit mussste ich nur noch die Procedure noch verallgemeinern:
Delphi-Quellcode:
procedure tform1.Spurzeichnen(image:timage,Datengruppe:Tdatengruppe);
var
i,s,x,y:integer;
begin
i:=1;
s:=0;
while i <= Datengruppe.Personenanzahl do
begin
  x:=Datengruppe.Daten[i].Ort[0].x;
  y:=Datengruppe.Daten[i].Ort[0].y;
  image.Canvas.MoveTo(x,y);
  s:=1;
   while s <= Datengruppe.Daten[i].Anzahl do
      begin
         x:=Datengruppe.Daten[i].Ort[s].x;
         y:=Datengruppe.Daten[i].Ort[s].y;
         image.Canvas.LineTo(x,y);
         s:=s+1;
      end;
  i:=i+1;
end
end;
Aufrufen der Procedure mit Button:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Spurzeichnen(image1,datengruppe1)
end
Jetzt kommt plötzlich ein Stack-overflow, wenn ich diese procedure ausfühern will!! warum??
Ich habe doch eigentlich nichts verändert!
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat