动态数组越界问题

 
    double zigzagbuffer[];
    double real_zigzag[10];
    ArrayInitialize(real_zigzag,EMPTY_VALUE);
    for (int i=0;i<1000;i++)
      {
        zigzagbuffer[i]=iCustom(Symbol(),e_TimeFrame,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i);
      }
    for(int m=0,n=0;m<1000;m++)
      {
        if(n>8) break;
        if(zigzagbuffer[m]!=0)
          {
            real_zigzag[n]=zigzagbuffer[m];
            n=n+1;
          }
      }   



这样一段调用指标缓冲区的代码:不知道为啥总是提示数组越界,测试了很多次了,只要给zigzagbuffer定义一个初始长度就没问题了,有人能解释一下原理吗,动态数组怎样不越界? 而且这个初始长度还不能用变量来定义,只能写一个死的数值,不然会报错。
 
动态数组存值时,需要动态分配空间,你没分配空间所以越界。
 
Wen Tao Xiong #:
动态数组存值时,需要动态分配空间,你没分配空间所以越界。
请问怎样动态分配空间呢?
 

int array_size = ArraySize(数组名称)

ArrayResize(数组名称,array_size + 1)


参照以上,动态分配数组空间

 
Wen Tao Xiong #:

int array_size = ArraySize(数组名称)

ArrayResize(数组名称,array_size + 1)


参照以上,动态分配数组空间

不行啊,还是越界。我一度怀疑这是MT4的bug

 

刚入门一个编程语言,不要太快下结论那里有 bug,更何况 MT4 是一个十多年的老平台 。


修改代码如下:(ps 你的原始取 zigzag 的代码逻辑是有问题的,有时 zigzag 最近的一个点会超过8根K之外,不过下面的修改仅针对你提出数组越位的问题来做补强,不改变你原有代码的取数组逻辑)


   int InpDepth=12;
   int InpDeviation=5;
   int InpBackstep=3;
   ENUM_TIMEFRAMES e_TimeFrame=PERIOD_CURRENT;
///
   int kC=1000;
   double zigzagbuffer[];
   double real_zigzag[];
   ArrayResize(zigzagbuffer,kC);
   ArrayResize(real_zigzag,kC);
   ArrayInitialize(zigzagbuffer,0.0);
   ArrayInitialize(real_zigzag,0.0);
   for(int i=0; i<kC; i++)
     {
      zigzagbuffer[i]=iCustom(Symbol(),e_TimeFrame,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,i);
     }
   for(int m=0,n=0; m<kC; m++)
     {
      if(n>8)
         break;
      if(zigzagbuffer[m]!=0.0)
        {
         real_zigzag[n]=zigzagbuffer[m];
         n=n+1;
        }
     }
 
ambercrystal #:

刚入门一个编程语言,不要太快下结论那里有 bug,更何况 MT4 是一个十多年的老平台 。


修改代码如下:(ps 你的原始取 zigzag 的代码逻辑是有问题的,有时 zigzag 最近的一个点会超过8根K之外,不过下面的修改仅针对你提出数组越位的问题来做补强,不改变你原有代码的取数组逻辑)


这样写,还不如直接在中括号里写数字更简洁,唯一的区别就是能用变量来定义数组大小了。

 
多谢,这个非常棒!完美解决