Errori, bug, domande - pagina 2493

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

Dove scavare?

Necessità di aspettare - la cabina è occupata (i dati non sono stati calcolati al momento del contatto)

 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL5 MT5 MetaTrader 5".
 
I commenti non relativi a questo argomento sono stati spostati in "Domande dai principianti di MQL5 MT5 MetaTrader 5".
 

Trovato un errore

...tested with error "critical runtime error 502 in OnTester function (array out of range, module ....ex5, file ....mqh, line 237, col 51...

Ecco il codice stesso:

//+-------------------
   // коррекция
   int      correcton_index[3];
            correcton_index[0]   = 1;
            correcton_index[1]   = (int)MathRound(balance_arr_size / 2);
            correcton_index[2]   = balance_arr_size;
   int      correcton_index3[5];
            correcton_index3[0]  =  1;
            correcton_index3[1]  = (int)MathRound(correcton_index[1] / 2);
            correcton_index3[2]  = correcton_index[1];
            correcton_index3[3]  = (int)MathRound((balance_arr_size - correcton_index[1]) / 2);
            correcton_index3[4]  = balance_arr_size;
   int      correcton_index7[9];
            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_index7[4]  = correcton_index3[2];
            correcton_index7[5]  = (int)MathRound((correcton_index3[3] - correcton_index3[2]) / 2);
            correcton_index7[6]  = correcton_index3[3];
            correcton_index7[7]  = (int)MathRound((balance_arr_size - correcton_index3[3]) / 2);
            correcton_index7[8]  = balance_arr_size;
   
   double   correcton   = NormalizeDouble((balance_arr[correcton_index[2]-1] / balance_arr[correcton_index[1]-1]) / (balance_arr[correcton_index[1]-1] / balance_arr[correcton_index[0]-1]),8);
   double   correcton3[3];
   double   correcton7[7];
   double   crr         = 1;
   ArrayInitialize(correcton3,EMPTY_VALUE);
   ArrayInitialize(correcton7,EMPTY_VALUE);
   for(int i = 0; i < 3; i++)
   {
      correcton3[i]  = NormalizeDouble((balance_arr[correcton_index3[i+2]-1] / balance_arr[correcton_index3[i+1]-1]) / (balance_arr[correcton_index3[i+1]-1] / balance_arr[correcton_index3[i+0]-1]),8);
      crr            = NormalizeDouble(crr * correcton3[i],8);
   }
   correcton         = NormalizeDouble(correcton * crr,8);
   crr               = 1;
   for(int i = 0; i < 7; i++)
   {
      correcton7[i]  = NormalizeDouble((balance_arr[correcton_index7[i+2]-1] / balance_arr[correcton_index7[i+1]-1]) / (balance_arr[correcton_index7[i+1]-1] / balance_arr[correcton_index7[i+0]-1]),8);
      crr            = NormalizeDouble(crr * correcton7[i],8);
   }
   correcton         = NormalizeDouble(correcton * crr,8);

Quando i = 6,correcton_index7[i+2] (i+2=8) non può andareoltre i limiti dell'array. Tanto più che il ciclo precedente non ha generato lo stesso errore. Cosa mi manca?

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

Trovato un errore

Ecco il codice stesso:

Quando i = 6,correcton_index7[i+2] (i+2=8) non può andare oltre i limiti dell'array. Tanto più che il ciclo precedente non ha generato lo stesso errore. Cosa mi manca?

Incorrecton3[3]; si specificano tre elementi.
E il ciclo viene chiamato quattro volte.

In
correcton7[7]; specificate sette elementi.
Ed eseguite il ciclo otto volte
.

 
Roman:

Incorrecton3[3]; si specificano tre elementi.
E si esegue il ciclo quattro volte.

In
correcton7[7 ]; si specificano sette elementi.
E si esegue il ciclo otto volte.

Contiamo sulle dita: i=0 e viene incrementato di 1 ad ogni ciclo. Funziona fino a i<7. La domanda per voi (contate sulle dita) è quante volte verrà eseguito il ciclo?

 
Sì, scusate, non avevo visto che non c'è nessun ciclo nella condizione =

Non può essere un problema qui?
correcton_index[0]   = 1;
correcton_index3[0]  = 1;  
 correcton_index7[0]  = 1;
Si specificano zero elementi e vi si assegna un valore.
 
Roman:
Sì, mi dispiace, non ho visto che nella condizione del ciclo non =

Non può essere un problema qui?
Si specificano zero elementi e vi si assegna un valore.

Grazie per la tua disponibilità ad aiutare, ma inizia a sistemare gli array da solo. )))

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

Grazie per la tua disponibilità ad aiutare, ma inizia a sistemare gli array da solo. )))

La dichiarazione della matrice e l'iterazione sugli elementi della matrice sono diverse )))

 
Roman:

La dichiarazione della matrice e l'iterazione sugli elementi della matrice sono diverse ))

   int      correcton_index7[9];        // объявление
            correcton_index7[0]  = 1;   // присвоение значения
            correcton_index7[1]  = (int)MathRound(correcton_index3[1] / 2);
Roman, prima di dare lezioni, impara a farlo da solo.
Motivazione: