为什么在退出窗体经常报错?(100分)

  • 主题发起人 主题发起人 fengjingyan
  • 开始时间 开始时间
F

fengjingyan

Unregistered / Unconfirmed
GUEST, unregistred user!
点击窗体上"退出"按钮,为什么经常报错?提示
"access violation at address 00403A34 in module 'project1.exe',
read of address 000001AC",我知道,可能是内存没有释放的原因,可我不知道该如何解决,
无论是把窗体close、 deactive,还是 free都这样。
 
你不是不用MDI结构的?
 
退出的时候执行的代码有问题,也可能是使用了已经释放的对象。
 
我用的不是MDI结构
 
你是不是有时间器控件
 
这个是对的:退出的时候执行的代码有问题,也可能是使用了已经释放的对象。
注意测试你的FREE、DESTROY代码
 
請貼上你的源代碼!
 
我代码是这样的:
procedure Tw_xxlr.bexitClick(Sender: TObject);
var
rav:integer;
begin
rav:=0;
if q_name.Modified then
rav:=MessageBox(0,'内容已经修改,是否存盘?','提示信息',MB_OKCANCEL + MB_DEFBUTTON1+MB_ICONQUESTION);
if rav=idOk then q_name.UpdateBatch;
if rav=idcancel then q_name.Cancel;
w_xxlr.Free;
end;
//其中的q_name是变量,TADOQuery型
 
procedure Tw_xxlr.bexitClick(Sender: TObject);
var
rav:integer;
begin
rav:=0;
if q_name.Modified then
begin //////////////
rav:=MessageBox(0,'内容已经修改,是否存盘?','提示信息',MB_OKCANCEL + MB_DEFBUTTON1+MB_ICONQUESTION);
if rav=idOk then q_name.UpdateBatch;
if rav=idcancel then q_name.Cancel;
end; //////////////
w_xxlr.Free;
end;
 
我试过这样的代码,也是这样,偶尔也出现这样的错误,看来错误可能在窗体操作过程中。
 
w_xxlr.Free;//这里错了。
自己free自己吗?用close代替应该不会有错。
 
procedure Tw_xxlr.bexitClick(Sender: TObject);
var
rav:integer;
begin
rav:=0;
if q_name.Modified then
rav:=MessageBox(0,'内容已经修改,是否存盘?','提示信息',MB_OKCANCEL + MB_DEFBUTTON1+MB_ICONQUESTION);
if rav=idOk then q_name.UpdateBatch;
if rav=idcancel then q_name.Cancel;
w_xxlr.Free;//最好 close;
end;
//其中的q_name是变量,TADOQuery型
 
有时还出现“abstract error",为什么?
 
在對象中Free自己是最容易出錯的
應該用Close
再在窗口的 onClose 事件中
加 Action:=cafree; 就可以了


 
to lqy:十二分的感谢您,用您提供的方法,我试了一下,真的不出错了。
 
后退
顶部