我有以下代码(在释放之前,我已检查了objCur不是Nil):
在DebugView中,我看到以下消息:
try
objCur.Free;
Except on E:Exception do
begin
OutputDebugString(PChar('Exception '+E.Message));
Assert(False);
end;
end;
它报告了以下异常信息:
无效的指针操作。objCur 是 TXX_TEA 类型。
objCur: TXX_TEA;
在 TXX_TEA.Destroy 中,我有以下代码:
destructor TXX_TEA.Destroy;
begin
OutputDebugString(PChar('Inside Destroy'));
...
inherited;
OutputDebugString(PChar('End of Destroy'));
end;
在DebugView中,我看到以下消息:
我知道objCur.Free调用了TXX_TEA.Destroy,但是它似乎没有出现错误。那么我应该在哪里跟踪这个无效的指针操作呢?销毁内部
...
销毁结束异常:无效指针操作
objCur
是否为非nil是不够的。事实上,如果它确实是nil,你根本不会有任何问题。你需要检查它是否引用了一个有效的对象,这实际上是无法在程序中自动检查的。你需要通过分析程序并确保没有任何导致变量具有无效引用的bug来进行检查。 - Rob Kennedy