フォームに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;
これはたびたび取り上げられますけど、for のなかで i とか j とかを
使っていなければ、コンパイラが最適化をしてインデックスが減る方を
選びます。そのほうが実行速度に有利なんだそうです。バグではありません。
そうだったんですか・・・
お早い回答ありがとうございます。
解決しました。
ツイート | ![]() |