现有的一个项目在D2009下编译,运行正常,换到D2010下编译正常,运行正常,但在点击退出时出现异常。
像平时遇到这样的问题,第一感觉是:
1.对象没有创建就访问
2.对象重复释放
因为是在退出的按钮事件中出错,而退出的代码只有一条close语句。所以怀疑是有对象重复释放。
但找半天也没有找出问题所在。
后来无意间想到我用到了登陆窗口,会不会是登陆窗口窗体引起的问题。
把工程文件打开:
frmLogin := TfrmLogin.Create(Application);
frmLogin.ShowModal;
try
if frmLogin.ModalResult = 1 then
begin
frmLogin.Free;
frmLogin:=nil; //出错时,没有这一句
Application.CreateForm(TfrmANAM, frmANAM);
Application.Run;
end;
finally
frmLogin.Free;
end;
最后加上了一句frmLogin:=nil就可以了。
通过这次以后,记得以后对象不仅要free,还要赋值为nil。至于为什么d2009不报错,就不得而知。可能是d2010更严格些吧?