我以前从未在我的程序中注意到它,但对于我的一个TForm,我有一个destroy事件,它释放一个对象,被多次调用或触发。我不明白为什么。
procedure THTrendFrm.FormDestroy(Sender: TObject);
begin
LogAlarm.Free; <---Invalid Pointer Operation exception is raised
end;
提前致谢,
更新:这是我的程序关闭后的FastMM消息窗口。 TAlarmMsg是创建LogAlarm的类。
答案 0 :(得分:2)
TForm.OnDestroy
事件未被多次调用,因此在触发LogAlarm
事件之前,您必须在代码中的其他位置释放OnDestroy
对象。
答案 1 :(得分:1)
感谢David Heffernan和其他人。我发现了我的问题并修复了它。有问题的TForm在我的项目文件中创建了两次,如此。
Application.CreateForm(HTrendFrm,HTrend);
这解释了为什么毁灭被召唤两次。
一旦我删除了重复的行,它就会关闭。
答案 2 :(得分:0)
这取决于您如何创建LogAlarm。
如果LogAlarm是TComponent后代,并且您已使用表单作为所有者创建它,则不应在其上调用Free,因为一旦表单被销毁,组件将自动清除。
或者,如果您坚持自己清理它,请在创建期间将所有者保留为零。