![]() |
Stacküberlauf
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
wenn ich mein programm durchlaufen lassen will zeigt er mir nach der 4. tabelle immer folgenden Fehler an! STACKÜBERLAUF Woran liegt es und wie kann ich es verhindern? Ich stelle mal den code zur verfügung! Mfg Christian |
Re: Stacküberlauf
Hai Christian,
ersteinmal: "Herzlich Willkommen in der Delphi-PRAXIS" :hello: Zitat:
Ich habe mal dein Button1Click als Beispiel genommen und auf die Entscheidenden Codezeilen reduziert:
Delphi-Quellcode:
Ich denke jetzt erkennst Du das Problem.
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; |
Re: Stacküberlauf
Hi,
du rufst zB. in der Procedure Button3Click die Procedure blackliste4_pruefen auf. In dieser rufst du dann Button3.Click auf was wiederum Button3Click ausführt. Das ist eine prima Schleife aus dem das Programm nicht mehr raus kommt wenn dann nicht irgend wann der Stacküberlauf auftreten würde. Diesen Fehler machst du fast bei jeder Procedure mit dem Namen blacklisteX_pruefen. Diese Aktionen:
Delphi-Quellcode:
kann man auch in einer For-Schleife vereinfachen was dann zu einer wirklich besseren
i := 1;
ar_akt_tabelle[i] := inttostr(a[1]) + inttostr(a[2]); //ListBox2.Items.Add(ar_akt_tabelle[i]); inc(i); ar_akt_tabelle[i] := inttostr(a[2]) + inttostr(a[1]); //ListBox2.Items.Add(ar_akt_tabelle[i]); inc(i); ar_akt_tabelle[i] := inttostr(a[2]) + inttostr(a[3]); //ListBox2.Items.Add(ar_akt_tabelle[i]); inc(i); ar_akt_tabelle[i] := inttostr(a[3]) + inttostr(a[2]); //ListBox2.Items.Add(ar_akt_tabelle[i]); Übersicht des Programmes führt. //Roter Kasten: Man(n) Sharky, tipp langsamer... :mrgreen: |
Re: Stacküberlauf
danke für eure bemühungen. waren sehr hilfreiche für mich. bin nu an einer anderen schleife bei. mal gucken was draus wird. vielen dank
mfg christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz