Почему диспетчер памяти Delphi сообщает о ложных утечках памяти при завершении работы? - PullRequest
4 голосов
/ 03 ноября 2008

При завершении работы я получаю сообщение об утечке памяти, в котором говорится, что у меня 3 утечки определенного объекта. Однако с этим две проблемы.

  1. Это происходит только с перерывами. Я могу запустить свою программу, выполнить точно такую ​​же последовательность шагов (открыть файл данных, отобразить его и снова закрыть), и иногда сообщение появляется, а иногда нет. В этих путях кода нет вызовов random () или другой «недетерминированной» логики.

  2. Проверка кода говорит о том, что сообщенная утечка памяти невозможна; объект создается только внутри определенного класса, и он должным образом освобождается в деструкторе этого класса. (И я создаю более трех объектов родительского класса. И никаких исключений не возникает во время очистки.)

Добавление результатов трассировки в конструктор и деструктор для этого класса показывает, что каждый созданный объект уничтожается, даже если диспетчер памяти сообщает об обратном. Поэтому я могу только заключить, что это ложный положительный результат. Однако добавление «RegisterUnexpectedMemoryLeak (self)» в конструктор приводит к удалению сообщения.

Кто-нибудь видел что-нибудь подобное раньше? Есть идеи, что может быть причиной? Я настолько уверен, насколько это возможно, что объекты не протекают, так что же происходит вместо этого?

Ответы [ 2 ]

7 голосов
/ 03 ноября 2008

Используйте свежие FastMM , включите построение файла карты в настройках компоновщика, определите условный символ FullDebugMode и перестройте программу. Тогда пройди свои шаги. По завершении программы он должен сгенерировать файл programname__MemoryManager__EventLog.txt с информацией о том, где в программе был создан протекший объект.

0 голосов
/ 03 ноября 2008

Создайте утечку памяти, если вы уверены, что в той же функции, а затем посмотрите, что сообщает диспетчер памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...