procedure TForm1.Button3Click(Sender: TObject);
begin
  if not assigned(Form2) then
    Form2 := TForm2.Create(Application);
  try
    Form2.ShowModal;
  finally
    Form2.Free;
//    Form2 := nil;
  end;end;procedure TForm1.Button4Click(Sender: TObject);
begin
  Edit2.Text := IntToStr(Form2.gFrame);
end;procedure TForm1.Button5Click(Sender: TObject);
begin
  Form2.gFrame := Form2.gFrame + 12;
  Edit2.Text := IntToStr(Form2.gFrame);
end;这里的Form2.Free怎么理解,将Form2所指向的内存空间释放后,怎么可以继续对Form2.gFrame进行操作,是不是因为Form2.gFrame还指向原来的地址,如果是这样,这里所指的内存空间释放是不是说下次创建新的窗体时这段内存空间可以进行重新分配,而在它重新分配前,里面的结构还是原来的

解决方案 »

  1.   

    form2.free;
    就释放了,如果还要用到
    只能再次
    Form2 := TForm2.Create(Application);
      

  2.   

    Form2 := TForm2.Create(Application);
      

  3.   

    程序里CREATE的内存都是在堆上分配的
    FREE了之后是找不回来的
      

  4.   

    我只是想用这个例子来请教这个问题"将Form2所指向的内存空间释放后,怎么可以继续对Form2.gFrame进行操作,是不是因为Form2.gFrame还指向原来的地址,如果是这样,这里所指的内存空间释放是不是说下次创建新的窗体时这段内存空间可以进行重新分配,而在它重新分配前,里面的结构还是原来的?"
    TForm1.Button3Click后关闭Form2,这时Form2.gFrame还是指向原来的地方,TForm1.Button5Click也可以对它赋值,如果这时在创建一个其他的窗体Form3,关闭后再
    Button4Click或Button5Click,Form2.gFrame里的值就变了这是不是可以证明"这里所指的内存空间释放是不是说下次创建新的窗体时这段内存空间可以进行重新分配,而在它重新分配前,里面的结构还是原来的",重新分配后就变了.