0

如何在此处处理或处理/避免数组超出范围错误:

  for(int i=0; i<=ObjectsTotal()-1; i++)
    {
     string objName = ObjectName(0,i);
     if(StringFind(objName,"Last#")>=0)
       {
        string tempval= objName;
        string temtext= ObjectGetString(0,objName,OBJPROP_TEXT);

        StringReplace(tempval,"Last#","");
        int tempnum = (int)(tempval);
        for(int k=tempnum; k>=tempnum-20; k--)
          {
            
           if(
              RBuffer1[k] != EMPTY_VALUE)      
             {
              ObjectDelete(0,objName);
              DrawText("Last#"+tempnum,Time[tempnum],Low[tempnum],temtext+"_0","Arial",9,clrWhite);
              break;

             }
           else
              if(RBuffer2[k] != EMPTY_VALUE)    
                {
                 ObjectDelete(0,objName);
                 DrawText("Last#"+tempnum,Time[tempnum],Low[tempnum],temtext+"_1","Arial",9,clrWhite);
                 break;
                }
          }
       }
    }

我确信我的逻辑有问题,但无法弄清楚到底是什么,并且该指标在某些时间范围内工作正常,但在 2 ,3 时间范围内,它会抛出错误数组超出范围

这是 for(int k=tempnum; k>=tempnum-20; k--)我收到错误的地方。

4

1 回答 1

0

首先,使用“ArraySize”检查“RBuffer1”的大小:

      int iArrSize =  ArraySize(RBuffer1);               
      if (iArrSize >= 20) 
      {
         ...
      }  

更重要的是,数组索引从 0 开始到预定义的大小(在您的情况下为 20 或 21)。但是您正试图访问索引 20 到 41。显然,您将收到“数组超出范围”错误消​​息。只需将您的代码更改为:

      if (RBuffer1[k - 21] != EMPTY_VALUE) 
      {
         ...
      }  
于 2021-10-08T13:08:48.997 回答