myform.free 与 myform := nil有何不同?(50分)

  • 主题发起人 主题发起人 Mischa
  • 开始时间 开始时间
M

Mischa

Unregistered / Unconfirmed
GUEST, unregistred user!
本人是一个菜鸟,提个小问题。
我在编一个程序时,在开始不让FORM自动加载。
当要使用这个FORM时就用条命令:
if myform = nil then myform := Tmyform.create(nil);
myform.showmodal;
myform.free;

可有时成功,有时不行,(出现访问地址错)
而我将MYform.free改成myform:=nil就没有问题。
myform.free是释放内存,它和将FORM置NIL是不是一样功能?
 
myform := nil;
如果 myform 未被释放(Free),则该句将 myform 同 myform 指向的地址空间
的联系割断,这样会造成资源浪费。
改为:
if myform = nil then // 或 if not Assigned(MyForm) then
begin
myform := Tmyform.create(nil);
myform.showmodal;
myform.free;
end
else
myform.ShowModal;
这样可保证你借的资源由你还。
 
问题是free后myform并不会自动为nil,因此,
如果一定要这样判断,可以用: FreeAndNil过程
 
温柔一刀是对的。
上面的程序有误,加一行。
myform := Tmyform.create(nil);
myform.showmodal;
myform.free;
myform := nil; // 必须有这行。

 
多人接受答案了。
 
后退
顶部