Errores, fallos, preguntas - página 3150

 
Nikolai Semko #:

el operador ternario parece más conciso (IMHO)

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

manera aún más concisa :

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:

Ya escribí que con esta construcción estás accediendo al índice del buffer con rates_total(cuando prev_calculated == 0 ).
Y esto es un desbordamiento, porque rates_total es el tamaño del buffer cuyo último elemento es rates_total-1

¡Sí, entiendo por qué el desbordamiento está sucediendo ahora!

¿Por qué esta construcción funcionaba antes y por qué nofunciona ahora?

int limit = rates_total-prev_calculated;

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

Porque el buffer se asigna exactamente a rates_total
y no arates_total+1

Estoy esperando a escuchar lo que Artyom tiene que decir, él entiende el tema.
 
Roman #:

¡Sí, entiendo por qué el desbordamiento está sucediendo ahora!

¿Por qué este diseño funcionaba antesy ahora no?

Porque el buffer se asigna exactamente a rates_total
y no arates_total+1

Los milagros no existen.
Si antes funcionaba, debía ser un código diferente.

 
Roman #:

Con este diseño.


El búfer del indicador se sale de los límites.

Por favor, muéstrame un ejemplo paraticks con ciclo i>=0
tal vez he olvidado lo que estoy haciendo mal
.

aproximadamente reducir el índice en 2 o 3 en el borde máximo para estar seguros).

 
Nikolai Semko #:

No hay milagros.
Si antes funcionaba, debía ser un código diferente

Anteriormente, el cálculo correcto del límite era

int limit = rates_total-1-prev_calculated;

y pasaría al bucle i>=0.

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

Pero ahora no funcionará porque el límite resulta ser -1

 
Esta discusión es off-topic, pertenece a algún hilo de novatos
 
Roman #:

El cálculo correcto solía ser

y entraría en el bucle i>=0

Ahora no entra porque el límite resulta ser -1

Antes tampoco podía entrar con el mismo código.
no se inventa nada.

descargue la antigua compilación de Hatimlansky y compruébela, si no me cree.

 
TheXpert #:
Esta discusión está fuera de tema aquí, pertenece a algún hilo de novatos

Si no ha utilizado este diseño antes, entonces absténgase con su offtop.

 
Nikolai Semko #:

Tampoco pude entrar con el mismo código antes
no inventes esto

de Hatimlansky descarga la build antigua y compruébala si no me crees.

Artem también utilizó esta construcción.
Que describió anteriormente, por lo que sólo él entiende el problema aquí.

 
Roman #:

El cálculo correcto solía ser

y entraría en el bucle i>=0

Y ahora no lo hace, porque el límite resulta ser -1.

Siempre había una comprobación: if(limit>1) limit= rates_total-1. Esto es para los casos en que no hay i+algo en los cálculos. Si lo hay, entonces hay que incluir estos "cuántos-algo" a la construcción: limit=total_de_tasas-1-algo.

Sin ella, siempre habría un rebasamiento de la matriz. Porque rates_total no es otra cosa que Bars(). En consecuencia, si hay 5000 barras y nos dirigimos al índice 5000, quedaremos fuera de los límites del array (el cálculo de las barras empieza por cero).

En tu ejemplo, el cálculo del límite es erróneo:

int limit = rates_total-1-prev_calculated;

Debería ser así:

int limit = rates_total-prev_calculated;

Y después comprueba si hay límite>1

y si el límite es mayor que uno, entonces el límite = rates_total-1