Я отлаживаю свою программу с помощью 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 –