android x86 支付宝,【MyBean调试笔记】接口的使用和清理

【DEMO信息】

有问题的DEMO, 由芒果提交

【问题描述】

双击Tab页面关闭页面和插件的时候出现AV异常

c277a208eb215262df3eeed9dd3f9679.png

【问题调试】

我们在调试的时候出现这个错误时断点停在这里

1b7bceabe0830c4e0dfe7ecb362d0007.png

可以看到停留在这个位置@IntfClear,指针清理的位置

7d544ffd9f145bd7a27b78601c05d100.png

好我们来调试下这个过程,跟一下是什么时候出现的, 在end 处下个断点后切换到cpu页,我们看到在ret之前调用了一过程,这个地址应该是做一些清理工作后然后返回到调用者地址,

e33e0c9b24d42ddcd6d9bfc783dbbbad.png

跟进去后,一会就跳到错误的界面,可以说明在清理时出现的,这个时候我们来看看这段代码

procedureTfrmMain.pgcMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);varIndex: Integer; lvPluginForm: IPluginForm; lvTabShtEx:TTabShtEx;begin //左键点击并且双击if (Button = mbLeft) and (ssDouble in Shift) then beginIndex :=pgcMain.IndexOfTabAt(X, Y);if Index >= 0 then beginlvTabShtEx :=TTabShtEx(pgcMain.Pages[Index]); lvPluginForm :=lvTabShtEx.PluginForm;if Application.MessageBox('确认要关闭画面吗?', '询问', MB_OKCANCEL + MB_ICONQUESTION) = IDCANCEL thenExit; lvPluginForm.freeObject; pgcMain.Pages[Index].Free;end;end;end;

这段代码中有一个lvPluginForm为接口IPluginForm变量, 过程在退出时会执行lvPluginForm := nil和其他一些资源的清理工作,清理的时候会触发对象的__release方法,但是我们看到这个对象已经释放掉了,然后在进行清理的时候出现了上面看到的访问违规的错误。

【问题解决】

找到出现问题的根本,解决起来就很快了,尽量不要等到过程清理时在去清理你的资源,特别是可能访问不存在的资源。在end;之前 加一句lvPluginForm := nil;这样就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值