Erreurs, bugs, questions - page 3150

 
Nikolai Semko #:

J'ai déjà écrit qu'avec cette construction, vous accédez à l'index du tampon avec le nombre rates_total (lorsque prev_calculated == 0 ).
Et c'est un débordement parce que rates_total est la taille du tampon dont le dernier élément est rates_total-1

Oui, je comprends pourquoi le débordement se produit maintenant !

Pourquoi cette construction fonctionnait-elle avant et pourquoine fonctionne-t-elle pas maintenant?

int limit = rates_total-prev_calculated;

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

Parce que le tampon est alloué exactement à rates_total
et non àrates_total+1

J'attends d'entendre ce qu'Artem a à dire, il comprend le problème.
 
Roman #:

Oui, je comprends pourquoi le débordement se produit maintenant !

Pourquoi cette conception fonctionnait-elle avant,mais plus maintenant?

Parce que le tampon est alloué exactement à rates_total
et non àrates_total+1

Les miracles n'existent pas.
Si ça a marché avant, ça devait être un code différent.

 
Roman #:

Avec cette conception.


Le tampon de l'indicateur sort des limites.

Veuillez me montrer un exemple deticks avec un cycle i>=0
. J'ai peut-être oublié ce que je fais mal
.

réduire grossièrement l'indice par 2 ou 3 au niveau du bord maximal pour être sûr).

 
Nikolai Semko #:

Il n'y a pas de miracles.
Si ça a marché avant, ça devait être un code différent.

Auparavant, le calcul correct de la limite était

int limit = rates_total-1-prev_calculated;

et il passerait dans la boucle i>=0.

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

Mais cela ne fonctionnera pas maintenant car la limite s'avère être -1

 
Cette discussion est hors sujet, elle doit avoir lieu dans un fil de discussion pour débutants
 
Roman #:

Le calcul correct était autrefois le suivant

et il entrerait dans la boucle i>=0

Maintenant, il ne veut pas entrer parce que la limite s'avère être -1.

Je ne pouvais pas non plus me connecter avec le même code auparavant.
n'invente rien.

Téléchargez l'ancien build de Hatimlansky et vérifiez-le, si vous ne me croyez pas.

 
TheXpert #:
Cette discussion est hors sujet ici, elle doit avoir lieu dans un fil pour débutants.

Si vous n'avez jamais utilisé ce design auparavant, abstenez-vous de le faire avec votre offtop.

 
Nikolai Semko #:

Je n'ai pas pu me connecter avec le même code avant non plus
ne l'invente pas

de Hatimlansky téléchargez l'ancienne version et vérifiez-la si vous ne me croyez pas.

Artem a également utilisé cette construction.
Qu'il a décrit ci-dessus, donc lui seul comprend le problème ici.

 
Roman #:

Le calcul correct était autrefois le suivant

et il entrerait dans la boucle i>=0

Et maintenant, ce n'est pas le cas, car la limite s'avère être -1.

Il y avait toujours un contrôle : if(limit>1) limit=rates_total-1. C'est pour les cas où il n'y a pas de i+quelque chose dans les calculs. Si c'est le cas, alors ces "combien-quelque-chose" doivent être inclus dans la construction : limit=rates_total-1-quelque-chose.

Sans cela, il y aurait toujours un dépassement de tableau. Parce que rates_total n'est rien d'autre que Bars(). De même, s'il y a 5000 barres et que l'on s'adresse à l'index 5000, on sortira des limites du tableau (le calcul des barres commence à zéro).

Dans votre exemple, le calcul de la limite est erroné :

int limit = rates_total-1-prev_calculated;

Ça devrait être comme ça :

int limit = rates_total-prev_calculated;

Et après cela, vérifiez la limite>1

et si la limite est supérieure à un, alors limite = taux_total-1

 
Artyom Trishkin #:

Il y a toujours eu un contrôle : if(limit>1) limit=rates_total-1. C'est pour les cas où il n'y a pas de i+quelque chose dans le calcul. Si c'est le cas, alors ces "combien-quelque chose" doivent être inclus dans la construction : limit=rates_total-1-quelque chose.

Sans cela, il y aurait toujours un dépassement de tableau. Parce que rates_total n'est rien d'autre que Bars(). De même, s'il y a 5000 barres et que l'on s'adresse à l'index 5000, on sortira des limites du tableau (le calcul des barres commence à zéro).

Dans votre exemple, le calcul de la limite est erroné :

Ça devrait être comme ça :

Et après cela, vérifiez la limite>1

Et si la limite est supérieure à un, alors limite = taux_total-1

Merci Artem ! Et désolé pour le dérangement.
C'est vrai, il devrait y avoir une vérification, je l'ai juste oubliée.
J'ai toujours un commentaire dans le code
//Check and calculate the number of calculated bars.
Apparemment, le copier-coller a causé mon malentendu.
Tout fonctionne comme il se doit avec le chèque. Merci.

Raison: