for文で値が不正になる

解決


Teru  2004-09-20 01:44:02  No: 11025  IP: [192.*.*.*]

フォームにmemo1つとボタン2つを貼り付けて、以下のようにします。
ボタン1とボタン2の違いはmemo1.lines.add〜の一行のみです。
beginのあたりにブレークポイントを設置してループ変数i,jの値を見ていくと、
ボタン2の方は何故かi,jともに「3」からスタートしてしまうのです。
その後もi,jの数値は増えるどころか減ったりします。
ボタン1の方はちゃんと0からスタートして2で終わっているのに、何故かわかりません。もしかしてバグなんでしょうか?
こちらの環境はXPHomeとDelphi6Personalです。

//正常に動く方
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
  for i:= 0 to 2 do
    for j:= 0 to 2 do
    begin
      memo1.Lines.Add(inttostr(i) + ',' + inttostr(j));
    end;
end;

//妙な動きをする方
procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
  for i:= 0 to 2 do
    for j:= 0 to 2 do
    begin
      memo1.lines.Add('Test');
    end;
end;

編集    削除
jok  2004-09-20 01:51:02  No: 11026  IP: [192.*.*.*]

これはたびたび取り上げられますけど、for のなかで i とか j とかを
使っていなければ、コンパイラが最適化をしてインデックスが減る方を
選びます。そのほうが実行速度に有利なんだそうです。バグではありません。

編集    削除
Teru  2004-09-20 01:56:01  No: 11027  IP: [192.*.*.*]

そうだったんですか・・・
お早い回答ありがとうございます。
解決しました。

編集    削除