希望这次20分有满意回答!,关于动态生成Form和释放问题。ccrun等高手快来救命

donwmufromdying 2005-10-31 03:26:01
平时处理都可以,今天写了一个程序,描述一下:
Form1中动态生成Form2对象,然后,使用完成后释放Form2.
我是在Form1中的一个函数中调用的。如下:
TForm1::func1(int argc)
{
if (Form2==NULL)
Form2=new TForm2(this);
if (Form2!=NULL)
{
Form2->x=10;
Form2->Y=argc;
Form2->AddXY();
Form2->ShowModal();
if (Form2!=NULL)
{
Form2->Close();
delete Form2;
}
}
}
因为这个函数会被反复调用,所以问题就出来了:在第一次调用我但不执行到delete Form2时,发现
Form2指针还是没变成NULL,这样,我第二次再调用该函数func的时候,Form2!=NULL,但是访问Form2却会报错,说内存访问非法了。晕乎中。
...全文
189 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdhans 2005-11-01
  • 打赏
  • 举报
回复
with TForm2.Create(nil) do
begin
try
x := ... //x 是外部可以访问的变量
ShowModal;
finally
Free;
end;
end;
netying 2005-11-01
  • 打赏
  • 举报
回复
FengSC 2005-11-01
  • 打赏
  • 举报
回复
赶在给分前接点分:
TForm1::func1(int argc)
{
if (Form2==NULL)
Form2=new TForm2(this);
if (Form2!=NULL)
{
Form2->x=10;
Form2->Y=argc;
Form2->AddXY();
Form2->ShowModal();
Form2->Close();
delete Form2;
Form2 = NULL;
}
}
kwokwinglau 2005-10-31
  • 打赏
  • 举报
回复
很明显,就是加=NULL.是要手动置的.
donwmufromdying 2005-10-31
  • 打赏
  • 举报
回复
明天结
Friecin 2005-10-31
  • 打赏
  • 举报
回复
没了!结了吧!
donwmufromdying 2005-10-31
  • 打赏
  • 举报
回复
hehe 多谢各位,我看了相关帮助,在delete后面增加了手工设置为NULL的语句。
我发现delete如果成功的话不会自动设置该指针为NULL,不成功倒是会throw一个异常。
多谢各位。我再等等看看是否有其他的回答。然后给分
Friecin 2005-10-31
  • 打赏
  • 举报
回复
汗~ 刚才一楼没有人啊! 怎么我一发贴,就跑二楼了??
Friecin 2005-10-31
  • 打赏
  • 举报
回复
我虽然看不明白你的这个函数要干什么,但就你说的错误问题,解决办法如下:
TForm1::func1(int argc)
{
if (Form2==NULL)
Form2=new TForm2(this);
if (Form2!=NULL)
{
Form2->x=10;
Form2->Y=argc;
Form2->AddXY();
Form2->ShowModal();
if (Form2!=NULL)
{
Form2->Close();
delete Form2;
Form2 = NULL;
}
}
}

还有,既然你已经用了ShowModal() ,就是说这个窗体显示后,会挂起应用,你为什么加
if (Form2==NULL)
Form2=new TForm2(this);
?????

直接不就可以le :

Form2=new TForm2(this);
Form2->x=10;
Form2->Y=argc;
Form2->AddXY();
Form2->ShowModal();
//Form2->Close();//这句没有意义
delete Form2;







shadowstar 2005-10-31
  • 打赏
  • 举报
回复
建议把 Form2 声明为局部变量,每调用就生成一次。

TForm1::func1(int argc)
{
if (Form2==NULL)
Form2=new TForm2(this);
Form2->x=10;
Form2->Y=argc;
Form2->AddXY();
Form2->ShowModal();
delete Form2;
Form2 = NULL;
}

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧