delphi2010下发生的关于数组的一个奇怪问题 请大家帮忙分析一下
setlength 1 以后,数组的长度应该是1吧,可为什么还显示为0呢?

解决方案 »

  1.   

    由于数组默认下标起始为0,而函数high返回的是数组下标的最大值(而不是长度,莫混了!),当你设置它的长度为1时,最大和最小的下标都为0,它自然就显示 0 了。
      

  2.   

    你说的明显是不对的,setlength 1以后,下标是0是对的,但长度明显不可能是0,给你看看setlength 2以后的情况。
      

  3.   

    无法显示图片,亲自己复制一下网址看图片吧,是setlength 2以后的调试
      

  4.   

    gzzai所讲的部分没错,上下标确实应该为0,是我举例不恰当,所以我又用setlength 2调试以后截图,high和len仍然为0,十分奇怪,这种情况没法使,会造成内存泄露。
      

  5.   

    因为不知道你具体的环境,没法分析(或做个demo让我看看?[email protected])。我这里没你说的问题出现://测试环境:xp + delphi2010
    procedure TForm1.Button1Click(Sender: TObject);
    var f:array of TForm;
    begin
      setlength(f,3);
      showmessage(inttostr(high(f)));//显示 2
      showmessage(inttostr(length(f)));//显示 3
    end;
      

  6.   

    鼠标指向的提示不一定是你想要的值比如一个integer变量,只是赋初值,后面若没有用到就会被优化掉一样
    看到的值可能是0或者没有显示;这种问题没必要深究,用showmessage();显示出来是多少就是多少
      

  7.   


    用showmessage显示的结果也是这样的。 
    我把这些简单的语句移出try结构体赋值就正常了,但泄露问题还是偶尔存在,还不清楚原因,但不是经常出现,暂时不清楚原因。有空再深入分析吧,其他代码很长,所以无法列出,而且应该与其他代码无关,因为上面所列部分即是初次调用的简单赋值,感谢大家给出的思路。以前听说delphi2010注释多了容易出问题,但他们讲的好象是精简版本,我用的是完整版。不知道是否与此有关?
    我不是老手,但根本不算新手。有新发现再回来和大家共享。散分,平均分配。
      

  8.   

    gzzai 20分,kaikai_kk 15分,s11ss 5分分不多,希望大家愉快