AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Stack-Überlauf in while-schleife

Ein Thema von oli_a · begonnen am 10. Jul 2008 · letzter Beitrag vom 11. Jul 2008
Antwort Antwort
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#1

Stack-Überlauf in while-schleife

  Alt 10. Jul 2008, 13:37
Hallo,
ich habe grad angefangen mit Delphi. Folgendes Problem kann ich leider nicht lösen.
Ich bekomme bei Ausführung folgedner whil-schleife einen stack-überlauf-fehler.

Delphi-Quellcode:
i:=0;
while i <= ende do
    begin
    Ausgabe_kanal_1[i] := (2/4095) * Lese_Daten[i]; //Dezimalzahl in Volt
    Ausgabe_kanal_2[i] := (2/4095) * Lese_Daten[i+1];
    Ausgabe_kanal_3[i] := (2/4095) * Lese_Daten[i+2];
    Inc(i,3);
    end;
Die arrays Ausgabe_kanal sind alle vom Typ extended.
Das array Lese_Daten word.
ende ist ein integer-wert

Aufgabe der Schleife:
Ich habe ein array und möchte es in drei arrays aufteilen.
der erste wert ins erste array,
der zweite ins zweite,
der dritte ins dritte
und der vierte wieder ins erste array,
usw.
und sie dabei halt umrechnen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Stack-Überlauf in while-schleife

  Alt 10. Jul 2008, 13:44
Den Stacküberlauf kann ich Dir nicht erklären, aber Du hast trotzdem einen Fehler drin. Der Index 'i' ist für die rechte Seite zuständig und wird immer um 3 erhöht, das passt aber nicht für die linke Seite.
Delphi-Quellcode:
i:=0;
j:=0; // NEU
while i <= ende do
    begin
    Ausgabe_kanal_1[j] := (2/4095) * Lese_Daten[i ]; //Dezimalzahl in Volt
    Ausgabe_kanal_2[j] := (2/4095) * Lese_Daten[i+1];
    Ausgabe_kanal_3[j] := (2/4095) * Lese_Daten[i+2];
    Inc(i,3);
    Inc(j); // NEU
    end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#3

Re: Stack-Überlauf in while-schleife

  Alt 10. Jul 2008, 13:51
oh stimmt, vielen Dank schonmal.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Stack-Überlauf in while-schleife

  Alt 10. Jul 2008, 13:53
Ein Stacküberlauf kann auch dann vorkommen, wenn eine statische Variable zu groß ist. Zeig die ganze Methode .
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#5

Re: Stack-Überlauf in while-schleife

  Alt 10. Jul 2008, 14:15
Das hab ich auch schon gelesen.
So wie ich's verstanden habe, kommt das zu stande, wenn ich zu viele zugroße Variablen statische deklariere.

Mein Programm zeigt keinen Fehler, sobald ich diese beiden Zeilen herausnehme.

Delphi-Quellcode:
    
    Ausgabe_kanal_2[j] := (2/4095) * Lese_Daten[i+1];
    Ausgabe_kanal_3[j] := (2/4095) * Lese_Daten[i+2];
Die Deklaration der static array besteht ja weiterhin. Nur wenn ich mit ihnen auf diese Art und weise Verfahre, kommt der Stacküberlauf.
  Mit Zitat antworten Zitat
oli_a

Registriert seit: 10. Jul 2008
29 Beiträge
 
#6

Re: Stack-Überlauf in while-schleife

  Alt 11. Jul 2008, 11:32
komisch, wenn ich drei schleifen draus mach, haut's hin.

Delphi-Quellcode:
i:=0;
j:=0;
while i <= Anzahl_lesewerte do
    begin
    Ausgabe_kanal_1[j] := (2/4095) * Lese_Daten[i]; //Dezimalzahl in Volt
    Inc(i,3);
    Inc(j);
end;
i:=1;
j:=1;
while i <= Anzahl_lesewerte do
    begin
    Ausgabe_kanal_1[j] := (2/4095) * Lese_Daten[i]; //Dezimalzahl in Volt
    Inc(i,3);
    Inc(j);
end;
i:=2;
j:=2;
while i <= Anzahl_lesewerte do
    begin
    Ausgabe_kanal_1[j] := (2/4095) * Lese_Daten[i]; //Dezimalzahl in Volt
    Inc(i,3);
    Inc(j);
end;
er scheint sich an dem ausdruck Lese_Daten[i+1] und Lese_Daten[i+2] zu stören
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Stack-Überlauf in while-schleife

  Alt 11. Jul 2008, 14:00
Ja, weil Ausgabe_Kanal_2 und Ausgabe_Kanal_3 wegoptimiert wurden. (Du weist nur zu ...Kanal_1 zu)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: Stack-Überlauf in while-schleife

  Alt 11. Jul 2008, 14:06
while i <= ende do Und "ende" ist auch not weit genug vom i+2 entfernt?

Wäre da nicht ein
while (i+2 <= ende) do besser?

Sonst greifst Du im Zweifelsfall auf einen Bereich zu, den es im Array nicht gibt... Aufpassen: Sowas könnte zu einem Stacküberlauf führen

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Stack-Überlauf in while-schleife

  Alt 11. Jul 2008, 14:10
Zitat von Assertor:
Aufpassen: Sowas könnte zu einem Stacküberlauf führen
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Stack-Überlauf in while-schleife

  Alt 11. Jul 2008, 14:48
Mach doch einfach aus den statischen Arrays dynamische. Damit werden die Jungs auf den Heap geworfen, und dein Stack hat wieder Luft zum atmen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:28 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