var
  pa:array of array of double;  ...  setlength(pa,100,100);  此句报错  setlength(pa,10000);   改成这样能通过,但后面使用中出错
是什么原因,是不是delphi的数组大小定义有限制

解决方案 »

  1.   

    因为PA是二维的,setlength(pa,10000)只是定义了一层大小
    还需要定于第二层的,setlength(pa,100)
    for N:=0 to 99 do
    setlength(pa[N],100)
      

  2.   

    setlength可能有bug,delphi开发指南上说可以用setlength(pa, 100, 100)的,但我试过是不可以的,如果对setlength(pa[N], 100)这样设,显然是有问题的,因为你定义的pa是二维数据,而pa[N]是什么呢?如果pa是一维数据,那么对pa[N]使用setlength是设置什么长度?
      

  3.   

    在我印象中DELPHI好象不能设置2维的,要通过设置一维的,
    应该SETLENGTH(PA,100*100)
    这样就可以了。
      

  4.   

    SETLENGTH(PA,100*100) = SETLENGTH(PA,10000)
      

  5.   

    怎么可能呢?
    var
      pa:array of array of double;  ...  setlength(pa,100,100);  此句没有任何问题  setlength(pa,10000);  此句肯定会出错,无论你是用一维还是二维的方式存取。因为定义是用二维的,而设置长度却是一维的,实际设置的是行,不出错才怪。
    并不是delphi的数组大小定义有限制
      

  6.   

    两种方法都没错。
    第一种是一次性把两维的长度都设置了。
    第二种只设置了第一维,但可以接着设置第二维。
    比如
    setlength(pa,100);
    setlength(pa[0],100);
    setlength(pa[1],100);
    ...
    setlength(pa[99],100);
    你的错误不是这个设置的原因。
      

  7.   

    Up→fj218(洞庭风)。
    补充一点,第二点的好处是显而易见的,因为请看:
    type
      TTestArray:array of array of double;
    var
      Array1,Array2:TTestArray;
      //用第一种即一次性指定的方法,方便但缺少灵活性
      SetLength(Array1,100,100);
      //用第二种即先指定第一维的方法,麻烦但太灵活了
      SetLength(Array2,100);
      SetLength(Array2[0],10);
      SetLength(Array2[1],25);
      ...
      SetLength(Array2[35],5);
      ...
      SetLength(Array2[99],100);