エラー、バグ、質問 - ページ 3150

 
Nikolai Semko #:

三項演算子の方が簡潔に見える (IMHO)

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

さらに簡潔な方法で.

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:


そして、これはオーバーフローです。なぜなら、rates_total は、最後の要素がrates_total-1 であるバッファのサイズ だからです。

はい......なぜ今、オーバーフローが起こっているのかがわかりました

なぜ、以前はこの構成がうまくいって、今はうまく いかないのか?

int limit = rates_total-prev_calculated;

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

バッファはrates_total
rates_total+1ではなく、正確に割り当てられているため

この問題を理解しているアルテムの言葉を待っています。
 
Roman #:

はい......なぜ今、オーバーフローが起こっているのかがわかりました

なぜ、以前はこのデザインがうまくいっていたのに、今は うまくいかないのか?

バッファはrates_total
rates_total+1ではなく、正確に割り当てられているため

奇跡なんてないんだよ。
前はうまくいっていたのなら、別のコードだったのだろう。

 
Roman #:

このデザインで


インジケータ・バッファが範囲外になる。

周期i>=0のティックの 例を示してください
多分、私が間違っていることを忘れているのだと思います。

念のため、最大エッジでインデックスを2〜3個減らす)。

 
Nikolai Semko #:

奇跡は起きない
以前に動作していたのなら、別のコードだったのだろう

従来は、正しい限度額の計算が

int limit = rates_total-1-prev_calculated;

となり、i>=0のループに移行してしまいます。

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

しかし、限界値が-1であることが判明したため、今はうまくいきません。

 
この議論はオフトピックです、それはどこかの初心者スレッドに属しています。
 
Roman #:

以前は、正しい計算は

でループに入る i>=0

制限値が-1であることが判明したため、入らなくなった

私も以前、同じコードでログインできませんでした。
作り話はやめてください。

信じられなければ、Hatimlanskyから 古いビルドをダウンロードし、確認してください。

 
TheXpert #:
この議論はここではオフトピックです、それはどこかの初心者スレッドに属しています。

もし、このデザインを使ったことがないのであれば、オフトップは控えてください。

 
Nikolai Semko #:

以前も同じコードでログインできなかった
don't make up this

Hatimlanskyから 古いビルドをダウンロードし、それを確認してください。

アルテムもこのビルドを使用していました。
ということは、この問題を理解しているのは、彼だけなのです。

 
Roman #:

以前は、正しい計算は

でループに入る i>=0

そして今は、極限が-1であることが判明しているので、そうではありません。

常に、if(limit>1) limit=rates_total-1 というチェックが入っていました。これは、計算上i+somethingが存在しない場合に対応するものです。もしあるならば、この「何人何役」をlimit=rates_total-1-some-somethingのように構成する必要がある。

これがないと、必ずアレイのオーバーランが発生します。rates_total は Bars() 以外の何物でもないからです。したがって、5000本のバーがあるときにインデックス5000を指定すると、配列の限界から外れることになります(バーの計算はゼロから始まります)。

あなたの例では、限界値の計算が誤っています。

int limit = rates_total-1-prev_calculated;

こんな感じでいいんじゃないでしょうか。

int limit = rates_total-prev_calculated;

そして、その後に limit>1 をチェックします。

とし、limit が1より大きい場合は limit = rates_total-1 とする。