这关系到编译器的优化问题,看看m,这个数字在把edit1.text:=inttostr(m);语句注释掉以后,m的值就没有用过,所以Borland 的编译器会将m:=j div i 也忽略掉!不信自己写个程序,某个变量赋值后没有使用,然后跟踪单步调试,看看它的值就知道了!
我仅仅想赞叹:Borland 的编译器技术真的是炉火纯青了!

解决方案 »

  1.   

    注释掉 edit1.text:=inttostr(m)之后m:=j div i;这一句已经被编译器优化了,因为后续语句没有使用到 m,所以这一句不被编译了,所以也就不会引发异常
      

  2.   

    to comsun(comsun): Borland 的优化技术的确是独领风骚的不过,这一句嘛,还没有到你说的程度。这种优化是最起码的,DMG图就可以做到这样的优化。
      

  3.   

    在最下面想个办法调用m即可,如:button1.tag:=m;
      

  4.   

    把这加在try...except..的后面就可以了。
      

  5.   

    可以设置不优化的。project - option - compiler - code generation - optimization 把这个勾去掉就行了
      

  6.   

    如果我在后面加上一句j:=m;这样就引用了m,对吗?但还是弹出“Bed”对话框呀!
    procedure TForm1.Button1Click(Sender: TObject);
    var i,j,m,n:integer;
    begin
      i:=0;
      j:=10;
    try
    m:=j div i;
    edit1.text:=inttostr(m);{将被注释的语句}
    showmessage('Bed');
    except
    showmessage('Rigth');
    j:=m;
    end;{try}end;
      

  7.   

    也不对的,j的值在后面也没有使用,所以也被优化掉了要不优化,只有我的方法:
    project - option - compiler - code generation - optimization 把这个勾去掉就行了