Thema: Delphi Stacküberlauf

Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Stacküberlauf

  Alt 31. Mär 2007, 08:19
Hai Christian,

ersteinmal: "Herzlich Willkommen in der Delphi-PRAXIS"

Zitat von ticcoid:
...Woran liegt es und wie kann ich es verhindern? Ich stelle mal den code zur verfügung!
Das liegt daran das Du in deinem Programm eine "rekursion" eingebaut hast. Jede ButtonClick Methode ruft sich selber mehrmals selber auf. Da bei dem erneuten Aufruf einer Mothode aus der Methode selbst daten Daten auf den Stack gelegt werden müssen ist dieser irgend wann voll.

Ich habe mal dein Button1Click als Beispiel genommen und auf die Entscheidenden Codezeilen reduziert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if z = 0 then
    randomize; // Randomize sollte man nur einmal beim start des Programmes aufrufen
  if z = 0 then
    blackliste1_erstellen;
  zufallszahlen;
  blackliste2_pruefen; // Diese Methode ruft Button1OnClick wieder auf
end;

procedure tform1.blackliste2_pruefen;
var
  i, m, n: Integer;
begin
  for m := 1 to 30 do
    for n := 1 to 30 do
      if ar_akt_tabelle[m] = ar_blackliste[n] then
      begin
        z := 1;
        inc(versuche2);
        label1.Caption := inttostr(versuche2);
        Button1.Click; // Hier wird Button1.Click erneut aufgerufen
                       // Wenn Du die For-Do Schleife höher setzt zum beispiel ein 90
                       // anstelle der 30 würdest Du schon hier einen Stacküberlauf bekommen.
      end;
  z := 0;
end;
Ich denke jetzt erkennst Du das Problem.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat