私はプログラムをFastMMでデバッグしています。実際にメモリリークではなく、正当なメモリ割り当てであると思われる多くのメモリリークがあるようです。例えばFastMMは、リークされたメモリおよび/またはメモリが割り当てられたと報告しますか?
、
A memory block has been leaked. The size is: 20
This block was allocated by thread 0xD44, and the stack trace (return addresses) at the time was:
404902 [System.pas][System][@GetMem][3693]
406597 [System.pas][System][TObject.NewInstance][11044]
406B2A [System.pas][System][@ClassCreate][12121]
60A1D2 [CtrlObjs.pas][Ctrlobjs][TConnObj.Create][430]
61703B [Control.pas][Control][TControlMgr.FindLinks][854]
60ACB2 [CtrlObjs.pas][Ctrlobjs][TControlObject.FindLink][746]
60E2A3 [CtrlObjs.pas][Ctrlobjs][TDelayControl.EvalPulse][2105]
60E4C0 [CtrlObjs.pas][Ctrlobjs][TDelayControl.Evaluate][2193]
6102D4 [CtrlObjs.pas][Ctrlobjs][TLineControl.Evaluate][3155]
60ABF1 [CtrlObjs.pas][Ctrlobjs][TControlObject.ActiveCount][711]
6105D8 [CtrlObjs.pas][Ctrlobjs][TLineControl.ActiveCount][3261]
The block is currently used for an object of class: TConnObj
TConnObjは頻繁にオブジェクトを作成するために使用され、プログラムはもうそれを必要としていないときに破壊されたクラスです。しかし、FastMMはそれが実際のメモリリークであると報告しています。 FastMMのメモリリークログファイルを調べるとき、どのようなものかをどのように判断するのですか?
私はしばしば、アプリケーション終了時に明示的に解放しない何千ものオブジェクトを含むバッファプールを持っています。私はその中のすべてのそれらのバッファフィールドなどへのポインタを渡すことを気にしません。私はリークレポートをオフにしておきたいと思います:( –
@MartinJames、誰もあなたのコードで作業する必要がないことを願っています。これで実際のリークをチェックすることは不可能になります。 –
@martin RegisterExpectedMemoryLeakに何千もの呼び出しを書きます。 –