for文で値が不正になる

解決


Teru  2004-09-20 01:44:02  No: 11025

フォームに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

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


Teru  2004-09-20 01:56:01  No: 11027

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加