汉!!!是Delphi的巨Bug吗?以前怎么从来没有发现??? ( 积分: 30 )

  • 主题发起人 主题发起人 units
  • 开始时间 开始时间
U

units

Unregistered / Unconfirmed
GUEST, unregistred user!
最大值+1逐渐减少到最小值+1的,好奇怪阿!!!!!
比如
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to 10 do
begin
beep();
end;
end;
每次循环的时候看i的值,i居然是从11减少到1的,好郁闷,我在一个类似的循环里面使用
了计数器作为数组下标,结果总是出现逻辑问题,怎么也想不到居然是这个原因!!!
 
最大值+1逐渐减少到最小值+1的,好奇怪阿!!!!!
比如
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to 10 do
begin
beep();
end;
end;
每次循环的时候看i的值,i居然是从11减少到1的,好郁闷,我在一个类似的循环里面使用
了计数器作为数组下标,结果总是出现逻辑问题,怎么也想不到居然是这个原因!!!
 
把你那个"类似的循环"贴出来吧
 
是Delphi的一种优化策略,在程序编译的时候,进行的代码优化造成的,如果在循环中引用了i,就不会出现从11到1的现象了。
 
不用类似的循环了,就用这个循环,在beep()设置断点,然后逐次循还,用鼠标点在i上看i的变化是不是从11到1?
 
to yanwei_8001,这样的话如果我的代码是这样
for i := 0 to 10 do
begin
Myarray := Self.Edit1.Text;
end;
那么岂不是这样一个结果:
Myarray[11] := Self.Edit1.Text
...
Myarray[1] := Self.Edit1.Text
呢?请教
 
这个是Delphi对于循环优化的结果, 对于你贴出来的代码来说,这不会影响的你的
代码逻辑. 至于你其他代码的错误, 一般来说不会是因为这个原因造成的, 99%是
你自身的问题.
 
可能出现这样的问题吗?不可能的吗。
 
这个是Delphi对于循环优化的结果!
我从来没有遇到这种问题。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部