--------------------------------2011/11/1 14:44:31--------------------------------
FastMM 检测到对已释放对象的虚方法的调用. 一个访问冲突异常现在将被引发以中止当前的操作.被释放的对象所属的类: TcxDBTreeList虚方法: Destroy虚方法的地址: 985D88分配号码是: 37641该对象分配于线程 0x1B98, 当时的堆栈跟踪(返回地址):  
40325E [sys\system.pas][System][System.@GetMem][2654]
404C77 [sys\system.pas][System][System.TObject.NewInstance][8807]
40506E [sys\system.pas][System][System.@ClassCreate][9472]
985D4E [cxDBTL.pas][cxDBTL][cxDBTL.TcxCustomDBTreeList.Create][2069]
9E3EA3 [Common_2\UnitDataItem_2.pas][UnitDataItem_2][UnitDataItem_2.TDataItemScheme.Create][715]
9F154B [UnitsxMetersApp.pas][UnitsxMetersApp][UnitsxMetersApp.TsxMetersApp.CreateObjects][139]
BF580B [UnitSelectProtocol.pas][UnitSelectProtocol][UnitSelectProtocol.TFormSelectProtocol.FormActivate][125]
4C9229 [Forms.pas][Forms][Forms.TCustomForm.Activate][4771]
4CA301 [Forms.pas][Forms][Forms.TCustomForm.CMActivate][5369]
4E549A [Controls.pas][Controls][Controls.TControl.WndProc][5146]
404F74 [sys\system.pas][System][System.TObject.Dispatch][9284]该对象随后释放于线程 0x1B98, 当时的堆栈跟踪(返回地址):  
40327A [sys\system.pas][System][System.@FreeMem][2699]
404C95 [sys\system.pas][System][System.TObject.FreeInstance][8813]
4050B9 [sys\system.pas][System][System.@ClassDestroy][9513]
985DBF [cxDBTL.pas][cxDBTL][cxDBTL.TcxCustomDBTreeList.Destroy][2079]
432BF2 [common\Classes.pas][Classes][Classes.TComponent.DestroyComponents][10464]
4C34D3 [Forms.pas][Forms][Forms.DoneApplication][1576]
40F4D0 [sys\sysutils.pas][SysUtils][SysUtils.DoExitProc][3450]
405B9F [sys\system.pas][System][System.@Halt0][11901]
77F4413C [Unknown function at PathBuildRootW]
C27041 [sxMeters.dpr][sxMeters][sxMeters.sxMeters][103]
7C92DCBA [ZwSetInformationThread]当前线程的 ID 是 0x1B98, 导致该错误的堆栈跟踪(返回地址):  
404CDB [sys\system.pas][System][System.TObject.Free][8832]
9E43B7 [Common_2\UnitDataItem_2.pas][UnitDataItem_2][UnitDataItem_2.TDataItemScheme.Destroy][754]
404CDB [sys\system.pas][System][System.TObject.Free][8832]
41739D [sys\sysutils.pas][SysUtils][SysUtils.FreeAndNil][16983]
9F1953 [UnitsxMetersApp.pas][UnitsxMetersApp][UnitsxMetersApp.TsxMetersApp.DataModuleDestroy][190]
433DC2 [common\Classes.pas][Classes][Classes.TDataModule.DoDestroy][11420]
433CDB [common\Classes.pas][Classes][Classes.TDataModule.Destroy][11396]
433D1B [common\Classes.pas][Classes][Classes.TDataModule.Destroy][11401]
432BF2 [common\Classes.pas][Classes][Classes.TComponent.DestroyComponents][10464]
4C34D3 [Forms.pas][Forms][Forms.DoneApplication][1576]
40F4D0 [sys\sysutils.pas][SysUtils][SysUtils.DoExitProc][3450]由指针所指地址开始, 256 个字节的内存当前的内容 7FEF74A0:
18 8E C4 00 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80
. ? ? . € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
€ € € € € € € € € € € € € € € € € € € € € € € € € € € € € € € €
 

解决方案 »

  1.   

    对已释放对象的虚方法的调用什么意思?
    该对象分配于线程 0x1B98,该对象随后释放于线程 0x1B98又是什么意思?
    当前线程的 ID 是 0x1B98, 导致该错误的堆栈跟踪(返回地址): 又是什么意思?
    高手请赐教!  
      

  2.   

    楼主你别老纠结在这个报告上。 首先你要知道内存泄露检测的原理,其实很简单,就是程序会检测申请的内存和释放的内存是否一致。 所以只有你程序退出的时候才会给你报告。遇到这种内存泄露,最直接的方式就是运行程序多试试。比如如果你一运行就关闭程序,报泄露,就说明是你程序初始化时某些操作导致了。 没有报的话就在测试执行某个功能然后关闭,看报不报。
    最好的情况是可以定位到例如“某个按钮事件,不执行退出就不报泄露,执行后退出就报”,那就定位了泄露的位置,再看这个按钮事件对应的代码,凡是有create的,有没有对应的free有你问的时间,这样操作个几次早就把泄露点大致找出来了。