关闭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; 展开
【生成窗体部分】子窗口设置为手动生成
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; 展开
展开全部
问题出在你的free上。
在执行过程中实际是这样的:
你在关闭FORM2的时候,首先Action := CAFree;已经清除了FORM2,然后你又self.Release;则会释放不必要的内存,实际上free已经包含了release。
你去掉self.Release看看,应该不会出问题了。
并且你在try语句中,明明你是showmodal,也就是说显示FORM2的时候FORM1应该是已经在下层,而关闭FORM2的时候已经释放了,你却还要释放一次,这样怎么可能不出错呢?
在执行过程中实际是这样的:
你在关闭FORM2的时候,首先Action := CAFree;已经清除了FORM2,然后你又self.Release;则会释放不必要的内存,实际上free已经包含了release。
你去掉self.Release看看,应该不会出问题了。
并且你在try语句中,明明你是showmodal,也就是说显示FORM2的时候FORM1应该是已经在下层,而关闭FORM2的时候已经释放了,你却还要释放一次,这样怎么可能不出错呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的窗体并不是动态创建的,而下面的语句
self.Release;
则把。dpr文件里由工程创建的窗体释放掉了,自然就会出现这个错误了
self.Release;
则把。dpr文件里由工程创建的窗体释放掉了,自然就会出现这个错误了
追问
我的窗口为什么不是动态创建的呢???那怎么算动态创建啊?
追答
动态创建的话,步骤如下:project --》project options,然后把你要动态创建的窗体从auto-Create forms里转移到available forms里,最后在需要创建窗体的代码部分如下代码:
FormX := TFormX.Create;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := CAFree;
self.Release; //删掉此行
end;
begin
Action := CAFree;
self.Release; //删掉此行
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先连接数据库
然后select * from 数据库表 获取数据
然后调用数据,在前台显示
作者:$row['author']
时间:$row['time']
知识类型:$row['type']
大概就这个流程,基本上就是个留言板的程序原形
然后select * from 数据库表 获取数据
然后调用数据,在前台显示
作者:$row['author']
时间:$row['time']
知识类型:$row['type']
大概就这个流程,基本上就是个留言板的程序原形
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Form2.Free; 去掉
FormClose里面
Action := caFree;
Form2 := nil;
FormClose里面
Action := caFree;
Form2 := nil;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询