关于FOR循环的调试问题 |
尚未結案
|
logv
一般會員 ![]() ![]() 發表:5 回覆:22 積分:10 註冊:2004-03-16 發送簡訊給我 |
示例代码如下:
var i:integer; x,y:array [0..9] of string; begin for i:=0 to 9 do begin x[i]:=inttostr(i); //断点1 end; for i:=0 to 9 do begin y[i]:=x[i]; //断点2 end; end;在上面代码中,如果设置该两处断点调试的话,会发现第1个循环,i是从0到9变化的,而第2个循环i则是从10到1变化的,请问这是为什么? 注:该段代码仅为演示,请不必纠缠于实用价值. |
Vicen
高階會員 ![]() ![]() ![]() ![]() 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
这种情况除非你机器或DELPHI有问题,否则不可能出现这个情况,这个程序不管你用断点也好,用下面的输出的方法也好,只要DELPHI没问题,怎么也不可能出现第二个循环从10 TO 1的变化。 在第二个循环运行时 for i:=0 to 9 do i 已经被初始化赋值为0了。
procedure TForm1.Button1Click(Sender: TObject); var i:integer; x,y:array [0..9] of string; begin Memo1.Lines.Clear; for i:=0 to 9 do begin x[i] := inttostr(i); //断点1 Memo1.Lines.Add(x[i]); end; Memo2.Lines.Clear; for i:=0 to 9 do begin y[i] := x[i]; //断点2 Memo2.Lines.Add(inttostr(i)); end; end; |
logv
一般會員 ![]() ![]() 發表:5 回覆:22 積分:10 註冊:2004-03-16 發送簡訊給我 |
|
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
Vicen
高階會員 ![]() ![]() ![]() ![]() 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi logv, 我猜測應該是 Compile 時自動 Optimization 掉了,將 [Project]->[Option]->[Compiler]->[Optimization] 選項勾選掉,再重新 Compile 後即可正常了 Hi Vicen, 別動怒,你將 ShowMessage 指令拿掉,並如 logv 所言設置中斷點,即可發現問題!
------
Fishman |
h@visli
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
|
Vicen
高階會員 ![]() ![]() ![]() ![]() 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
logv
一般會員 ![]() ![]() 發表:5 回覆:22 積分:10 註冊:2004-03-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |