有一个父窗口 ParentForm, 父窗口中有一个Button1, Button1中的代码为procedure TParentForm.Button1Click(Sender: TObject);
begin
  MyChildForm := TMyChildForm.Create(Self);  
//这行代码意味着,MyChildForm窗口的内存
//由ParentForm负责释放!
end;--------
如果我是这样写ParentForm的窗体释放代码。
procedure TParentForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action := caFree;
  MyChildForm := nil;  
//在此时, MyChildForm已经被 := nil,  不知道ParentForm 
//还能不能够正确的释放MyChildForm的内存?????????????
end;                   
                       
//如果能够的话,MyChildForm已经被 := nil;它所对应的内存空间编译器是如何找到的??????//多谢了!!!!!!!----------------------------------------------------------------------------------
需要声明的是: ParentForm并不是第一级窗体,Parentform关闭的以后,应用程序不退出.

解决方案 »

  1.   

    1、
     action := caFree;
      MyChildForm := nil;  
    //在此时, MyChildForm已经被 := nil,  不知道ParentForm 
    //还能不能够正确的释放MyChildForm的内存?????????????没有问题。在这里MyChildForm已经被销毁。2、MyChildForm已经被 := nil;它所对应的内存空间编译器是如何找到的
    在系统内部,你可以理解为有一个表,包含变量名、地址等信息,因此没有问题的。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  2.   

    action := caFree;
      MyChildForm := nil; 
    这样已经被释放了