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

 
Сергей Таболин:

Словил ошибку

Вот сам код:

При i = 6 correcton_index7[i+2] (i+2=8) ну никак не может выйти за пределы массива. Тем более что аналогичный предыдущий цикл не ругается. Чего я не вижу?

В correcton3[3]; вы указываете три элемента.
А цикл запускаете четыре раза.

В correcton7[7 ]; вы указываете семь элементов.
А цикл запускаете восемь раз.

[Удален]  
Roman:

В correcton3[3]; вы указываете три элемента.
А цикл запускаете четыре раза.

В correcton7[7 ]; вы указываете семь элементов.
А цикл запускаете восемь раз.

Считаем на пальцах: i=0 и с каждым циклом увеличивается на 1. Работает пока i<7. Вопрос вам (считайте на пальцах) сколько раз будет пройден цикл?

 
Да, сорри, не доглядел что в условии цикла нет =

А вот тут не может быть проблем ?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
correcton_index7[0]  = 1;
Вы указываете ноль элементов, а присваиваете туда значение.
[Удален]  
Roman:
Да, сорри, не доглядел что в условии цикла нет =

А вот тут не может быть проблем ?
Вы указываете ноль элементов, а присваиваете туда значение.

Спасибо за желание помочь, только для начала сами разберитесь с массивами. )))

 
Сергей Таболин:

Спасибо за желание помочь, только для начала сами разберитесь с массивами. )))

Объявление массива и итерация по элементам массива разные вещи ))

[Удален]  
Roman:

Объявление массивов и итерация по элементам массива разные вещи ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
Роман, прежде, чем поучать, научитесь сами.
 
Сергей Таболин:
Роман, прежде, чем поучать, научитесь сами.

Раз вы обращаетесь к сообществу за помощью, то не кто вас поучать не собирается.
Хотел вам помочь, но действительно в глазах уже рябит, и трудно заметно где объявил, где присвоил.
Хоть бы отделил массивы блоками, для читаемости )) ну да ладно, разобрался.
Попробуй в отладчике пройтись по циклам, там виднее будет где засада.

 

@Сергей Таболин 

Какие значения может принимать balance_arr_size?

Как определён balance_arr?

[Удален]  
Francuz:

@Сергей Таболин 

Какие значения может принимать balance_arr_size?

Как определён balance_arr?

В этом проблем нет. Они используются и до этого участка кода и вопросов не вызывают.

Ошибку нашел в заполнении массива.

   // коррекция
   int      correcton_index[3];
   ArrayInitialize(correcton_index,NULL);
            correcton_index[0]   = 1;
            correcton_index[1]   = (int)MathRound(balance_arr_size / 2);
            correcton_index[2]   = balance_arr_size;
   int      correcton_index3[5];
   ArrayInitialize(correcton_index3,NULL);
            correcton_index3[0]  =  1;
            correcton_index3[1]  = (int)MathRound(correcton_index[1] / 2);
            correcton_index3[2]  = correcton_index[1];
            correcton_index3[3]  = (int)MathRound((correcton_index[2] - correcton_index[1]) / 2) + correcton_index[1];
            correcton_index3[4]  = balance_arr_size;
   int      correcton_index7[9];
   ArrayInitialize(correcton_index7,NULL);
            correcton_index7[0]  = 1;
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
            correcton_index7[2]  = correcton_index3[1];
            correcton_index7[3]  = (int)MathRound((correcton_index3[2] - correcton_index3[1]) / 2) + correcton_index3[1];
            correcton_index7[4]  = correcton_index3[2];
            correcton_index7[5]  = (int)MathRound((correcton_index3[3] - correcton_index3[2]) / 2) + correcton_index3[2];
            correcton_index7[6]  = correcton_index3[3];
            correcton_index7[7]  = (int)MathRound((balance_arr_size - correcton_index3[3]) / 2) + correcton_index3[3];
            correcton_index7[8]  = balance_arr_size;

Без этого значения получались неверные, но самое интересное что некоторые значения оказались отрицательными. Соответственно, при попытке обращения к элементу массива с индексом [-6] и выскакивал выход за пределы массива.

Надо было изначально всё распринтовать (хотел же) и проверить значения )))

 
Сергей Таболин:

В этом проблем нет. Они используются и до этого участка кода и вопросов не вызывают.

Ошибку нашел в заполнении массива.

Без этого значения получались неверные, но самое интересное что некоторые значения оказались отрицательными. Соответственно, при попытке обращения к элементу массива с индексом [-6] и выскакивал выход за пределы массива.

Надо было изначально всё распринтовать (хотел же) и проверить значения )))

Я говорил об источнике. А источник проблемы как раз в этих двух переменных (balance_arr_size и balance_arr) остальной весь код зависим от них.