Fehler, Irrtümer, Fragen - Seite 3150

 
Nikolai Semko #:

ternärer Operator sieht prägnanter aus (IMHO)

int limit = prev_calculated==0 ? 0: prev_calculated-1;

noch knapper formuliert:

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:

Ich habe bereits geschrieben, dass Sie bei dieser Konstruktion mit rates_total auf den Pufferindex zugreifen (wenn prev_calculated == 0 ).
Und das ist ein Überlauf, denn rates_total ist die Größe des Puffers, dessen letztes Element rates_total-1 ist

Ja, ich verstehe, warum der Überlauf jetzt stattfindet!

Warum hat dieses Konstrukt früher funktioniert und warumfunktioniert es jetzt nicht mehr?

int limit = rates_total-prev_calculated;

for(int i=limit; i>=0; i--)

Weil der Puffer genau auf rates_total
und nicht aufrates_total+1 verteilt ist

Ich bin gespannt, was Artem zu sagen hat, er versteht das Problem.
 
Roman #:

Ja, ich verstehe, warum der Überlauf jetzt stattfindet!

Warum hat dieses Design früher funktioniert,jetzt aber nicht mehr?

Weil der Puffer genau auf rates_total
und nicht aufrates_total+1 verteilt ist

Es gibt keine Wunder.
Wenn es vorher funktioniert hat, muss es ein anderer Code gewesen sein.

 
Roman #:

Mit diesem Entwurf.


Indikatorpuffer überschreitet die Grenzen.

Bitte zeigen Sie mir ein Beispiel fürTicks mit Zyklus i>=0
vielleicht habe ich vergessen, was ich falsch mache
.

reduzieren Sie grob den Index um 2 oder 3 an der maximalen Kante, um sicher zu sein).

 
Nikolai Semko #:

Es gibt keine Wunder.
Wenn es vorher funktioniert hat, muss es ein anderer Code gewesen sein.

Zuvor lautete die korrekte Grenzwertberechnung

int limit = rates_total-1-prev_calculated;

und es würde in die Schleife i>=0 gehen.

for(int i=limit; i>=0; i--)

Aber das funktioniert jetzt nicht mehr, weil die Grenze bei -1 liegt.

 
Diese Diskussion ist off-topic, sie gehört in einen Newbie-Thread
 
Roman #:

Die korrekte Berechnung lautete früher

und es würde in eine Schleife gehen i>=0

Jetzt geht er nicht mehr rein, weil der Grenzwert -1 ist.

Ich konnte mich vorher auch nicht mit demselben Code anmelden.
erfindet nichts.

Laden Sie den alten Build von Hatimlansky herunter und prüfen Sie ihn, wenn Sie mir nicht glauben.

 
TheXpert #:
Diese Diskussion ist hier fehl am Platz, sie gehört in einen Neulings-Thread

Wenn Sie dieses Design noch nicht verwendet haben, sollten Sie von einem Offtop absehen.

 
Nikolai Semko #:

Ich konnte mich vorher auch nicht mit demselben Code anmelden
erfinde das nicht

von Hatimlansky laden Sie die alte Version herunter und prüfen Sie sie, wenn Sie mir nicht glauben.

Auch Artem verwendete diesen Build.
Das hat er oben beschrieben, also versteht nur er das Problem.

 
Roman #:

Die korrekte Berechnung lautete früher

und es würde in eine Schleife gehen i>=0

Und jetzt nicht mehr, denn der Grenzwert ist -1.

Es gab immer eine Prüfung: if(limit>1) limit=rates_total-1. Dies ist für Fälle gedacht, in denen es kein i+irgendwas in den Berechnungen gibt. Wenn ja, dann sollte dieses "wie viele-etwas" in das Konstrukt aufgenommen werden: limit=rates_total-1-some-something.

Ohne sie würde es immer zu einem Array Overrun kommen. Denn rates_total ist nichts anderes als Bars(). Wenn es also 5000 Balken gibt und wir den Index 5000 ansprechen, fallen wir außerhalb der Grenzen des Arrays (die Berechnung der Balken beginnt bei Null).

In Ihrem Beispiel ist die Berechnung des Grenzwertes falsch:

int limit = rates_total-1-prev_calculated;

Das sollte so sein:

int limit = rates_total-prev_calculated;

Danach wird geprüft, ob das Limit>1 ist.

und wenn limit größer als eins ist, dann limit = rates_total-1