Про zero divide

 

Здравствуйте, уважаемые программисты! Помогите найти ошибку Zero divide

В той строке нуля никак не может быть, однако ошибка появляется

        i=Bars-Timeframe-1;
        if(counted_bars>=Timeframe) i=Bars-counted_bars-1;
      while(i>=0)   
      { 
        int sh=iBarShift(NULL,Timeframe,Time[i],false);
        Buff8[i]=iMA(NULL,Timeframe,Period1,0,MODE_SMA,PRICE_CLOSE,sh);
        Buff[i]=iClose(NULL,Timeframe,sh)*Buff8[i]/iClose(NULL,Timeframe,sh+Period1); // ошибка в этой строке
        Buff1[i]=(Buff[i]+Buff[i+1]+Buff[i+2]
                 +Buff[i+3]+Buff[i+4]+Buff[i+5]+Buff[i+6]
                 +Buff[i+7]+Buff[i+8]+Buff[i+9]+Buff[i+10]
                 +Buff[i+11]+Buff[i+12]+Buff[i+13])/14;
      } 
 
remon:

Здравствуйте, уважаемые программисты! Помогите найти ошибку Zero divide

В той строке нуля никак не может быть, однако ошибка появляется

У Вас выход за пределы массива. Вот тут iClose(NULL,Timeframe,sh+Period1). 
 
Vinin:
У Вас выход за пределы массива. Вот тут iClose(NULL,Timeframe,sh+Period1). 
Как это выход за пределы массива? Тут его нет.
 
remon:
Как это выход за пределы массива? Тут его нет.

Вы пытаетесь получить значение из массива, но этого значения нет. 

Поиграйте с этой строчкой i=Bars-Timeframe-1;

Доведите значение  i до рабочего варианта. Для начала просто сделайте что бы оно равнялось небольшому числу. Убедитесь в работоспособности алгоритма

 
Vinin:

Вы пытаетесь получить значение из массива, но этого значения нет. 

Поиграйте с этой строчкой i=Bars-Timeframe-1;

Доведите значение  i до рабочего варианта. Для начала просто сделайте что бы оно равнялось небольшому числу. Убедитесь в работоспособности алгоритма

Спасибо. буду копать
Причина обращения: