![]() |
Stack-Überlauf :-(
Hallo, bei einem kleinen Programm, welches Bubblesorten soll, tritt immer ein Stack-Überlauf auf, wenn eine Liste mit Zufallszahlen oder eine sortierte Liste von 0-x erstellt wird, welche danach sortiert werden soll. Bei einer invertiert sortierten jedoch nicht. Woran liegt das? Hier mal der Quelltext von dem Listen-Erstell-Button :-O also bei case...of 0 und 2 kommt ein Stacküberlauf, 1 geht reibungslos....
sorry für den nicht sehr eleganten Quelltext :-D
Delphi-Quellcode:
lol:=true;
Anzahl:=StrToInt(EdtAnzahl.text); SetLength(wert,Anzahl); ListBox1.Clear;ListBox2.clear; case cbxvorlage.itemindex of 0: begin for i:=0 to Anzahl-2 do begin wert[i]:=i; end; randomize; Zufallszahl:=random(Anzahl); wert[anzahl]:=Zufallszahl; for i:=0 to Anzahl-1 do begin if lol=true then ListBox1.Items.Add(IntTostr(wert[i])); if checkbox1.checked=true then begin if i>499 then lol:=false; end; end; end; 1: begin for i:=0 to Anzahl-1 do wert[i]:=Anzahl-i; for i:=0 to Anzahl-1 do begin if lol=true then ListBox1.Items.Add(IntTostr(wert[i])); if checkbox1.checked=true then begin if i>499 then lol:=false; end; end; end; 2: begin randomize; for i:=1 to anzahl do wert[i]:=random(anzahl); for i:=0 to Anzahl-1 do begin if lol=true then ListBox1.Items.Add(IntTostr(wert[i])); if checkbox1.checked=true then begin if i>499 then lol:=false; end; end; end; end; |
Re: Stack-Überlauf :-(
1. Schalte mal in den Projektoptionen die Bereichsprüfung mit an und erstell das Projekt neu. Dann beseitige erstmal die dann gemeldeten Bereichsfehler.
2. Wenn er mit einem EStackOverflow anhält in Delphi, dann lass dir mal den "Call-Stack" (STRG-ALT-S) anzeigen und dann verfolg mal in welcher Reihenfolge er immer wieder in die gleiche Procedure und schau mal genau warum bzw. was du anders machen musst. |
Re: Stack-Überlauf :-(
so, also die Quelle des Übels habe ich gefunden, es scheint ein Probolem mit Zufallszahlen zu geben. Wenn ich sowohl bei case 0 oder 2 die Zeile herausnehme, bei der dem Array eine zufällig erstellte Zahl zugewiesen wird, gibt es keinen Stacküberlauf mehr. Ich brauche diese zufälligen Zahlen aber ! :-O
diese Zeilen hier meine ich :
Delphi-Quellcode:
an dem erstellen der Zufallszahl liegt es übrigens nicht, denn bei case 0 wird die Zufallszahl ja vorher erstellt und dann erst in eine Variable gelegt. Dabei gibt es keine Probleme, erst wenn man diese dann in das Array packen möchte...
//bei 2:
wert[i]:=random(anzahl); //bei 0: wert[anzahl]:=Zufallszahl; Hat jemand eine Lösung für das Problem?? achja, das Call-Stack zeigt übrigens gar nichts an.... |
Re: Stack-Überlauf :-(
Du setzt die Länge von "wert" auf "Anzahl", greifst nachher aber auf den Index "Anzahl" zu.
|
Re: Stack-Überlauf :-(
hey, stimmt ;)
das hilft aber jedoch nur bei dem wo auf wert[anzahl] zugegriffen wird... bei dem anderen muss es noch an etwas Anderem liegen :-O da kommt übriegns mittlerweile, nachdem ich das mit der Anzahl korrigiert hab, kein Stack-überlauf, sondern nur ein "access violation ...."...hmm Es sieht dort jetzt also so aus:
Delphi-Quellcode:
2:
begin randomize; for i:=0 to anzahl-1 do wert[i]:=random(anzahl); for i:=0 to Anzahl-1 do begin if lol=true then ListBox1.Items.Add(IntTostr(wert[i])); if checkbox1.checked=true then begin if i>499 then lol:=false; end; end; |
Re: Stack-Überlauf :-(
Schalte in den Projektoptionen unter den Compileroptionen die Bereichs- und Überlaufprüfung ein und erstelle dein komplettes Projekt neu. Dann nochmal ausführen und schauen wo es zu Fehler kommt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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