delphi2010下发生的关于数组的一个奇怪问题 请大家帮忙分析一下

ab_yz 2012-07-31 10:05:09
delphi2010下发生的关于数组的一个奇怪问题 请大家帮忙分析一下




setlength 1 以后,数组的长度应该是1吧,可为什么还显示为0呢?
...全文
120 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
广州佬 2012-08-02
  • 打赏
  • 举报
回复
谢谢你给的分。

我根本就是个新手,希望有机会跟你和大家能多多交流。
ab_yz 2012-08-02
  • 打赏
  • 举报
回复
gzzai 20分,kaikai_kk 15分,s11ss 5分

分不多,希望大家愉快
ab_yz 2012-08-02
  • 打赏
  • 举报
回复

用showmessage显示的结果也是这样的。
我把这些简单的语句移出try结构体赋值就正常了,但泄露问题还是偶尔存在,还不清楚原因,但不是经常出现,暂时不清楚原因。有空再深入分析吧,其他代码很长,所以无法列出,而且应该与其他代码无关,因为上面所列部分即是初次调用的简单赋值,感谢大家给出的思路。

以前听说delphi2010注释多了容易出问题,但他们讲的好象是精简版本,我用的是完整版。不知道是否与此有关?
我不是老手,但根本不算新手。有新发现再回来和大家共享。

散分,平均分配。
广州佬 2012-08-01
  • 打赏
  • 举报
回复
由于数组默认下标起始为0,而函数high返回的是数组下标的最大值(而不是长度,莫混了!),当你设置它的长度为1时,最大和最小的下标都为0,它自然就显示 0 了。
kaikai_kk 2012-08-01
  • 打赏
  • 举报
回复
鼠标指向的提示不一定是你想要的值

比如一个integer变量,只是赋初值,后面若没有用到就会被优化掉一样
看到的值可能是0或者没有显示;这种问题没必要深究,用showmessage();显示出来是多少就是多少
广州佬 2012-08-01
  • 打赏
  • 举报
回复
因为不知道你具体的环境,没法分析(或做个demo让我看看?190814570@qq.com)。我这里没你说的问题出现:
//测试环境: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;
s11ss 2012-08-01
  • 打赏
  • 举报
回复
多线程?
ab_yz 2012-08-01
  • 打赏
  • 举报
回复
gzzai所讲的部分没错,上下标确实应该为0,是我举例不恰当,所以我又用setlength 2调试以后截图,high和len仍然为0,十分奇怪,这种情况没法使,会造成内存泄露。
ab_yz 2012-08-01
  • 打赏
  • 举报
回复
无法显示图片,亲自己复制一下网址看图片吧,是setlength 2以后的调试
ab_yz 2012-08-01
  • 打赏
  • 举报
回复
你说的明显是不对的,setlength 1以后,下标是0是对的,但长度明显不可能是0,给你看看setlength 2以后的情况。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧