错误、漏洞、问题 - 页 2493

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

在哪里挖?

需要等待--隔间很忙(联系时未计算数据)。

 
与本主题无关的评论已被移至"来自MQL5 MT5 MetaTrader 5初学者的问题"。
 
与本主题无关的评论已被移至"来自MQL5 MT5 MetaTrader 5初学者的问题"。
 

捕捉到一个错误

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

下面是代码本身。

//+-------------------
   // коррекция
   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);

当i=6时,correcton_index7[i+2](i+2=8)不能很好地超出数组的限制。更重要的是,之前的循环 没有产生同样的 错误。我错过了什么?

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

捕捉到一个错误

下面是代码本身。

当i=6时,correcton_index7[i+2](i+2=8)不能很好地超出数组的限制。更重要的是,之前的循环 没有产生同样的 错误。我错过了什么?

correcton3[3];你指定了三个项目。
,并且循环被调用了四次


correcton7[7];你指定了7个元素。
,并循环运行8次

 
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);
罗曼,在你讲课之前,先学习如何自己做。