打印本文 打印本文 关闭窗口 关闭窗口
Deiphi编译优化导致的死循环
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1024  更新时间:2009/4/23 18:26:47  文章录入:mintao  责任编辑:mintao

请看下面这段代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  strColor: string;
  i, R, G, B, p: integer;
  strlist: TStringList;
begin
  strColor := medt.Text + ''''-'''';
  strlist := TStringList.Create;
  try
    for R := 0 to 2 do       //把变量R改为i正常
    begin
      //showmessage(inttostr(r));   加上这句也正常了 循环体内读过R 值
      p := pos(''''-'''', strColor);
      strlist.Add(copy(strColor, 0, p-1));
      delete(strColor, 1, p);
    end;

    R := strToint(strlist[0]);
    G := strToint(strlist[1]);
    B := strToint(strlist[2]);
  finally
    strlist.Free;
  end;

  Self.Color := TColor (RGB (R, G, B));

  edtColor.Text := ''''$'''' + IntToHex (TColor (RGB (R, G, B)), 8);

  edtColor.SetFocus;
end;

因为循环语句中没有没有使用R变量,而在循环外有对R的使用。编译器优化导致的错误? delphi中,在循环体内是不能更改循环因子的。

下面贴出反编译的汇编代码:

打印本文 打印本文 关闭窗口 关闭窗口