AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stack-Überlauf :-(

Ein Thema von vogael · begonnen am 30. Aug 2006 · letzter Beitrag vom 4. Sep 2006
Antwort Antwort
vogael

Registriert seit: 13. Sep 2005
15 Beiträge
 
#1

Stack-Überlauf :-(

  Alt 30. Aug 2006, 22:10
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

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;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Stack-Überlauf :-(

  Alt 30. Aug 2006, 23:29
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.
  Mit Zitat antworten Zitat
vogael

Registriert seit: 13. Sep 2005
15 Beiträge
 
#3

Re: Stack-Überlauf :-(

  Alt 2. Sep 2006, 16:39
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:
//bei 2:
wert[i]:=random(anzahl);

//bei 0:
wert[anzahl]:=Zufallszahl;
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...


Hat jemand eine Lösung für das Problem??

achja, das Call-Stack zeigt übrigens gar nichts an....
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Stack-Überlauf :-(

  Alt 2. Sep 2006, 16:45
Du setzt die Länge von "wert" auf "Anzahl", greifst nachher aber auf den Index "Anzahl" zu.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
vogael

Registriert seit: 13. Sep 2005
15 Beiträge
 
#5

Re: Stack-Überlauf :-(

  Alt 4. Sep 2006, 16:12
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;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Stack-Überlauf :-(

  Alt 4. Sep 2006, 20:50
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz