Errori, bug, domande - pagina 3150

 
Nikolai Semko #:

l'operatore ternario sembra più conciso (IMHO)

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

in modo ancora più conciso:

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:

Ho già scritto che con questa costruzione state accedendo all'indice del buffer con il numero rates_total (quando prev_calculated == 0).
E questo è un overflow perché rates_total è la dimensione del buffer il cui ultimo elemento è rates_total-1

Sì, capisco perché l'overflow sta accadendo ora!

Perché questo costrutto funzionava prima e perchénon funziona ora?

int limit = rates_total-prev_calculated;

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

Perché il buffer è allocato esattamente a rates_total
e nonrates_total+1

Aspetto di sentire cosa ha da dire Artem, lui capisce il problema.
 
Roman #:

Sì, capisco perché l'overflow sta accadendo ora!

Perché prima questo design funzionavae ora no?

Perché il buffer è allocato esattamente a rates_total
e nonrates_total+1

I miracoli non esistono.
Se prima funzionava, doveva essere un codice diverso.

 
Roman #:

Con questo design.


il buffer dell'indicatore va fuori limite.

Per favore, mostratemi un esempio per itick con ciclo i>=0
forse ho dimenticato cosa sto facendo di sbagliato
.

ridurre approssimativamente l'indice di 2 o 3 al bordo massimo per essere sicuri).

 
Nikolai Semko #:

Non ci sono miracoli.
Se ha funzionato prima, deve essere stato un codice diverso

In precedenza, il calcolo corretto del limite era

int limit = rates_total-1-prev_calculated;

e passerebbe nel ciclo i>=0.

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

Ma ora non funziona perché il limite risulta essere -1

 
Questa discussione è off-topic, appartiene a qualche thread per principianti
 
Roman #:

Il calcolo corretto era

e andrebbe in loop i>=0

Ora non entra perché il limite risulta essere -1

Anche io non riuscivo ad accedere con lo stesso codice prima.
non inventare cose.

Scarica la vecchia build da Hatimlansky e controllala, se non mi credi.

 
TheXpert #:
Questa discussione è off-topic qui, appartiene a qualche thread per principianti

Se non hai mai usato questo design, allora astieniti con il tuo offtop.

 
Nikolai Semko #:

Non potevo accedere con lo stesso codice neanche prima
non inventare questo

da Hatimlansky scarica la vecchia build e controllala se non mi credi.

Anche Artem ha usato questa build.
Che ha descritto sopra, quindi solo lui capisce il problema qui.

 
Roman #:

Il calcolo corretto era

e andrebbe in loop i>=0

E ora non lo fa, perché il limite risulta essere -1.

C'era sempre un controllo: if(limit>1) limit=rates_total-1. Questo è per i casi in cui non c'è i+qualcosa nei calcoli. Se c'è, allora questi "quanti-qualcosa" dovrebbero essere inclusi nel costrutto: limit=rates_total-1-qualcosa-qualcosa.

Senza di essa, ci sarebbe sempre un superamento dell'array. Perché rates_total non è altro che Bars(). Corrispondentemente, se ci sono 5000 barre e ci rivolgiamo all'indice 5000, cadremo fuori dai limiti dell'array (il calcolo delle barre inizia da zero).

Nel tuo esempio, il calcolo del limite è sbagliato:

int limit = rates_total-1-prev_calculated;

Dovrebbe essere così:

int limit = rates_total-prev_calculated;

E dopo di ciò controlla se c'è un limite>1

e se il limite è maggiore di uno, allora limite = rates_total-1