关闭Delphi出现Access Violation at address 02C01C10. Read of address 02C01C10错误

在开发多窗口程序时,有时候关闭Delphi就会出现这个错误。我发现这个错误跟窗体有关,但不知道原因,把源码贴出来,请指教,谢谢!【生成窗体部分】子窗口设置为手动生成App... 在开发多窗口程序时,有时候关闭Delphi就会出现这个错误。我发现这个错误跟窗体有关,但不知道原因,把源码贴出来,请指教,谢谢!
【生成窗体部分】子窗口设置为手动生成
Application.CreateForm(TForm2,Form2);
try
Form2.ShowModal;
finally
Form2.Free;
end;

【子窗口部分】关闭时释放资源
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := CAFree;
self.Release;
end;
展开
 我来答
百度网友3ff0001
2012-01-17 · 超过10用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:7.1万
展开全部
问题出在你的free上。
在执行过程中实际是这样的:
你在关闭FORM2的时候,首先Action := CAFree;已经清除了FORM2,然后你又self.Release;则会释放不必要的内存,实际上free已经包含了release。
你去掉self.Release看看,应该不会出问题了。
并且你在try语句中,明明你是showmodal,也就是说显示FORM2的时候FORM1应该是已经在下层,而关闭FORM2的时候已经释放了,你却还要释放一次,这样怎么可能不出错呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6992c28f
2012-01-11 · 超过18用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:48.7万
展开全部
你的窗体并不是动态创建的,而下面的语句
self.Release;
则把。dpr文件里由工程创建的窗体释放掉了,自然就会出现这个错误了
追问
我的窗口为什么不是动态创建的呢???那怎么算动态创建啊?
追答
动态创建的话,步骤如下:project --》project options,然后把你要动态创建的窗体从auto-Create forms里转移到available forms里,最后在需要创建窗体的代码部分如下代码:
FormX := TFormX.Create;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迁石
2012-01-11 · TA获得超过118个赞
知道小有建树答主
回答量:302
采纳率:0%
帮助的人:167万
展开全部
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := CAFree;
self.Release; //删掉此行
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hong7204
2012-01-25 · TA获得超过9956个赞
知道大有可为答主
回答量:7787
采纳率:68%
帮助的人:3852万
展开全部
先连接数据库
然后select * from 数据库表 获取数据
然后调用数据,在前台显示

作者:$row['author']
时间:$row['time']
知识类型:$row['type']
大概就这个流程,基本上就是个留言板的程序原形
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太子野火
2012-01-11 · TA获得超过1146个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:140万
展开全部
Form2.Free; 去掉
FormClose里面
Action := caFree;
Form2 := nil;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式