Ошибка array out of range

 
int OnInit()
  {
//---
Comment ("start");
Variaciya();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
void Variaciya()
  {
   ArrayResize(combinacii,1); // комбинации по условию
   ArrayResize(combinacii1,1); // все комбинации 
   stroka = 1;
   stroka1 = 1;
   int N;
   N = 51; // Задайте количество строк
   GenerateCombinations(N);
   GenerateCombinations1(stroka1 - 1);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GenerateCombinations(int N)
  {
  Comment("start 1");
   int combination[];
   // Перебираем все длины комбинаций от 1 до N
   for(int i = 1; i< N+1;i++)
     {
      ArrayResize(combination,i); // Создаем массив для текущей длины комбинации
      GenerateCombination(combination, 1, 1, N); // Рекурсивно генерируем комбинации
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GenerateCombination(int &combination[],int index,int start,int N)
  {
  Comment("start 2");
   if(ArraySize(combination) == 8)
     {
     
      if(index > ArraySize(combination))
      {
         for(int p = 1;p== 8;p++)
           {
            for(int p1 = 1;p1==8;p1++)
              {
               if (mas1[p1]== combination[p])
                 {
                  schet1++;
                 }
               if (mas2[p1]== combination[p])
                 {
                  schet2 = schet2 + 1;
                 }
               if (mas3[p1]== combination[p])
                 {
                  schet3 = schet3 + 1;
                 }
               if (mas4[p1]== combination[p])
                 {
                  schet4 = schet4 + 1;
                 }
               if (mas5[p1]== combination[p])
                 {
                  schet5 = schet5 + 1;
                 }
               if (mas6[p1]== combination[p])
                 {
                  schet6 = schet6 + 1;
                 }
               if (mas7[p1]== combination[p])
                 {
                  schet7 = schet7 + 1;
                 }
               if (mas8[p1]== combination[p])
                 {
                  schet8 = schet8 + 1;
                 }
               if (mas9[p1]== combination[p])
                 {
                  schet9 = schet9 + 1;
                 }
               if (mas10[p1]== combination[p])
                 {
                  schet10 = schet10 + 1;
                 }
              }
           }
      if (schet1 ==2) 
        {
            for(int i = 1;i< ArraySize(combination)+1;i++)
              {
               combinacii[stroka][i] = combination[i];
               combinacii1[stroka1][i] = combination[i];
               if (i == ArraySize(combination))
                 {
                  stroka = stroka + 1;
                  stroka1 = stroka1 + 1;
                  ArrayResize(combinacii,stroka);
                  ArrayResize(combinacii1,stroka1);
                  Comment(stroka + "/n" + stroka1);
                 }
              }
              }
            else
            for(int i = 1;i<ArraySize(combination)+1;i++)
               {
               combinacii1[stroka1][i] = combination[i];
               if (i == ArraySize(combination))
                 {
                  stroka1 = stroka1 + 1;
                  ArrayResize(combinacii1,stroka1);
                 }
                 
           }
        }

     

   // Рекурсивно генерируем комбинации
   for(int i = start; i<N+1;i++)
     {
      combination[index] = i;                                                          ЗДЕСЬ ВЫДАЕТ ОШИБКУ
      GenerateCombination(combination, index + 1, i + 1, N);
     }
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
return;
  }


Доброго времени суток. Пытаюсь создать код для генерации комбинаций. Выдает ошибку в самом конце Array out of range. Может кто подскажет в чем может быть проблема?
 
Anton Novokhatskii:


Доброго времени суток. Пытаюсь создать код для генерации комбинаций. Выдает ошибку в самом конце Array out of range. Может кто подскажет в чем может быть проблема?

проблема в коде

освойте отладчик...

PS/ зачем вообще постоянно дёргать ArrayResize в рекурсии - вот загадка

 
Anton Novokhatskii:
Доброго времени суток. Пытаюсь создать код для генерации комбинаций. Выдает ошибку в самом конце Array out of range. Может кто подскажет в чем может быть проблема?
Можете подробнее написать, какого вида результат вы хотите получить? Если у вас должен получиться двумерный массив, то каким должны быть его начальные строки?

И ещё: ваши функции не являются чистыми, то есть для их работы не достаточно только аргументов функций. Это усложняет понимание кода и может способствовать возникновению трудноуловимых ошибок.
 
как я понимаю проблема может быть следующая: длина массива меньше чем значение index. Однако проверка показала -  они равны. Не могу представить какая проблема еще может быть, поиск в интернете не дает ответа
 
Anton Novokhatskii #:
как я понимаю проблема может быть следующая: длина массива меньше чем значение index. Однако проверка показала -  они равны. Не могу представить какая проблема еще может быть, поиск в интернете не дает ответа
Ответ может дать только отладка.
И что значит "они равны"? У вас массив имеет размер 100 и индекс равен 100? В этом случае - явный выход за пределы массива.
 
Anton Novokhatskii #:
как я понимаю проблема может быть следующая: длина массива меньше чем значение index. Однако проверка показала -  они равны.

Индексы в массиве начинаются с нуля, последний - на единицу меньше длины массива. А если равны - Array out of range и получите.

 
даже если прописываю 
combination[ArraySize(combination)] = i;
все равно выдает эту ошибку...
 
Спасибо оргромное!) перескочил с другого языка, совсем забыл про нулевой индекс)))