invalid pointer operation(200分)

  • 主题发起人 主题发起人 netfool
  • 开始时间 开始时间
N

netfool

Unregistered / Unconfirmed
GUEST, unregistred user!
在下搞了一个DBGrid2Report的VCL Component,用来将DBGrid里的数据自动放到Quick
Report上,这些没有问题,已经搞定!

可是,当我在关闭窗口时发生错误:invalid pointer operation,是在Form.Destroy时
发生的,这个过程的代码只是:
代码:
destructor TfrmReport.Destroy;
begin
  FStrings.Free;  // 我的Form Class用了一个TStringList,所以在这里释放,这句没有错
  inherited;  // ***** 这句话出错... *****
end;
---------------------------------
出错的信息如下:
Project Project1.exe raised exception class EInvalidPointer with message 'invalid pointer operation'.
Process stopped. Use Step or Run to continue.
---------------------------------

天啊,不知道是为什么啊,而且inherited也跟踪不进去了呀... !_!
请赐教...谢谢!

[?][?][?]
 
无效的指针操作吧
应该是资源的释放问题
 
兄台,这些我知道啊!
可是,问题是我可以确保我使用的资源都有被free了...
相信从我的代码中,你应该也可以看得出来,其它也不过用了一个
TStringList而已,而其它过程中使用的也都有free了啊 :(
 
好像应该把inherited语句放在析构函数的首句。这是标准习惯。
另外,如果你不是刻意去继承某个类,可以不用inherited;语句。
比如说,无须再生成子类等等。
 
TfrmReport的父类是哪个?
你是不是先释放了属于TfrmReport的东东?
 
你看一下free的先后顺序。
 
估计你在frmReport中的OnClose或者OnDestroy又写了一句FStreams.Free;
 
只要达到目的,不一定抱死某种方法,可以用:
procedure form1close(sender:tobject);
begin
if (FStrings<>nil) then
FStrings.Free;
end;
 
to: cansea
你的说法(第一,三句)完全错误;

to: copy_paste
没有OnClose,只有Destroy

to: wql
你的做法只是在重复Free方法
 
其实WQL也不无道理啊试试先吧
 
后退
顶部