Ошибки, баги, вопросы - страница 3149

 
Artyom Trishkin #:

Опять ничего не понял. В чём у вас что-то не так? Вроде всё как раньше было.

При такой конструкции 

int limit = rates_total-prev_calculated;

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


индикаторный буфер выходит за пределы.

Покажи пожалуйста пример для тиков с циклом i>=0
может я что подзабыл, и не так делаю.

 
Roman #:

При такой конструкции 
индикаторный буфер выходит за пределы.

всегда выходил.
 
Roman #:

При такой конструкции 


индикаторный буфер выходит за пределы.

Покажи пожалуйста пример для тиков с циклом i>=0
может я что подзабыл, и не так делаю.

я уже писал, что при такой конструкции вы обращаетесь к индексу буфера с номером rates_total (когда prev_calculated == 0 ). 
А это переполнение, так как  rates_total - это размер буфера, последний элемент которого  rates_total -1

 
Nikolai Semko #:

все же тернарный оператор смотрится более лаконично (ИМХО)

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

еще более лаконичный способ :

int limit = prev_calculated-bool(prev_calculated);

:))

 
Nikolai Semko #:

я уже писал, что при такой конструкции вы обращаетесь к индексу буфера с номером rates_total (когда prev_calculated == 0 ). 
А это переполнение, так как  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 #:

чудес не бывает. 
Раньше если работало, то значит это был другой код

Раньше правильный расчёт limit был

int limit = rates_total-1-prev_calculated;

и заходил в цикл i>=0

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

А теперь не заходит, потому что limit получается -1

 
Это обсуждение здесь оффтоп, ему место в какой-нибудь новичковой ветке
 
Roman #:

Раньше правильный расчёт limit был

и заходил в цикл i>=0

А теперь не заходит, потому что limit получается -1

раньше тоже не мог заходить с этим же кодом
не сочиняйте

у Хатимлянского скачайте старый билд и проверьте, если не верите.