Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Stacküberlauf (Aufrufebene 1) mit Array's Kategorie: Programmierung (von André H. - 18.08.2003 10:50)
Als Antwort auf Stacküberlauf (Aufrufebene 1) mit Array's von Franz - 18.08.2003 10:11

Hallo Franz,

Zuerst: Fange bitte keinen neuen Thread für das gleiche Thema an.
Ich hab' deshalb das Posting in den alten Thread verschoben.

Jetzt zum Problem:

Ich habe vergeblich versucht das Problem zu reproduzieren.
Bei mir kommt es zu keinerlei Fehlermeldungen.
Viell. postest Du kurz ein (kleines) kompilierbares Programm(mit allen Variabeldefinitionen),
welches diesen Fehler verursacht.

Aber ich vermute, Du benutzt alte Dateien.
Besser gesagt, Du benutzt nicht die aktuelle Compiler-DLL.

Die erste Version der Compiler-DLL hatte einige Bugs im Bezug auf
Strings und Bytearrays.

AuÃ?erdem setzt Du eine For-Schleife falsch !
Bei negativen Schritten muÃ? immer ein Vergleichsoperator mit rein.
(siehe Handbuch Seite 84/85)
Ansonsten lautet der Vergleich in der For-Schleife immer so: a ...<=b
Somit wird diese bei
  cnt_row=(send_buff_size-1) ... 1 step -1
nie durchlaufen, auÃ?er (send_buff_size-1) ist kleiner gleich 1.
Dann wird die Schleife aber 254 bzw. 32767 bzw. 2147483647 mal durch, je
nach Variabel-Typ von cnt_row.

MfG André H.


> hoppla..
>
> Hallo,
> es funzt einfach nicht - was ist hier falsch, dass es beim Ausführen immer wieder zum Stacküberlauf kommt:
>
> Und zwar ist das Array so definiert:
>
> const send_buff_size=12;         //Send Buffer Zeilen Anzahl
> const send_buff_amount_data=10;  //Send Buffer Daten Feld Anzahl
>
>   type Column        // Spalten
>   {
>     string col[send_buff_amount_data];
>   };
>   type Buffer
>   {
>     Column row[send_buff_size];  
>   };
>  Buffer send_buffer;
>
> mit dieser Funktion sollte immer die letzte freie Zeile ausgegeben werden, jedoch kommt es zum Stacküberlauf
> beim Ausführen der Simulators und in der CC2 funzt es gar net:
>
>   function get_last_row () returns int    //Ã?bergabe des letzten Eintrags des send_buffers
>   {
>     for cnt_row=(send_buff_size-1) ... 1 step -1    //überprüfen jeder Zeile des send_buffers
>       {
>        ISSI_b=send_buffer.row[cnt_row].col[0];    //Ã?bernahmer der Zeilennummer aus der for-Schleife
>        empty="";
>        if (not (strx.comp (ISSI_b,empty)))         //Wenn im erstes Feld befüllt, dann die Zeilennummer rückgeben
>        return cnt_row;
>      }  
>   }
>
>
> Würde mich, nachdem ich schon viele, viele Stunden damit verbracht habe, wirklich über jede Idee freuen!
> mfg,
> Franz


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: