Эта ошибка выглядит так, как будто вы используете FastMM для управления памятью.Ошибка указывает, что вы ссылаетесь на указатель, который был очищен FastMM со значением DebugFillDWord
.
Это означает, что вы используете интерфейс, который ссылается на объект, который уже был освобожден.
Это также означает, что вы не включили CatchUseOfFreedInterfaces
.
. Для того, чтобы изменить их и отладить, вы не можете делать со стандартным FastMM, который поставляется с Delphi.
Вам нужно будет загрузить FastMM (версия 4.94).
После загрузки:
Как gabr уже упоминается, внутри FastMM4Options.inc
, убедитесь, что вы включили FullDebugMode
и CatchUseOfFreedInterfaces
(который отключает CheckUseOfFreedBlocksOnShutdown
, но вы не интересуетесь последним прямо сейчас).
Возможно, вы также захотите включить RawStackTraces
;это зависит от того, достаточно ли хороша текущая трассировка стека.
Когда вы выполните эти настройки, , а затем запустите ваше приложение с FastMM через отладчик и установите точку останова для этого метода внутри.блок FastMM4:
procedure TFreedObject.InterfaceError;
Я немного изменил свой блок FastMM4, чтобы получить больше контекстной информации;Я могу поделиться этим с вами (я уже отправил его по почте команде FastMM4, но он еще не был включен в официальные источники).
Я написал довольно плотную статью в блоге об отладке с помощью FastMM, который может вам помочь.
Оставьте здесь записку, если это требует дальнейшего объяснения: -)
Удачи, и дайте нам знать, если вам нужны дальнейшие указания.
-jeroen
Edit : 20100701 - выделены биты, упомянутые в комментарии Брайана.