Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

Утечка памяти (объекты TConnectionPoints/TConnectionPoint )   Найти похожие ветки 

 
vlad-mal ©   (2006-11-26 15:06) [0]

Всем привет. D7.1, FastMM4.

Настрол свой проект, чтобы он использовал FastMM4.
Вывалившийся список с описанием проблем типа "memory leak" просто убил, но достаточно  оперативно удалось все подчистить.
Однако, выяснилась след штука.
Вступление.
Приложение является COM - сервером и обращается к другим COM - серверам.
Стало быть, иногда нужно получить экземпляр "Себя"
(TCustomApplication.Create):

var
 gfMySelf          : ICustomApplication;
...
begin
 gfMySelf := TCustomApplication.Create;

, где

 TCustomApplication = class(TAutoObject, IConnectionPointContainer,
ICustomApplication)

...

и т.д.
Так вот, FastMM4 на каждый вызов TCustomApplication.Create ругается, что

---------------------------
bfCustom.exe: Обнаружена утечка памяти
---------------------------
В этом приложении происходят утечки памяти. Утечки блоков маленького размера
(исключая ожидаемые утечки зарегистрированные по указателю):

1 - 12 байт: TConnectionPoints x 1
13 - 20 байт: TList x 2, Unknown x 1
53 - 60 байт: TConnectionPoint x 1


Т.е. дело все в том, что не вызывается деструктор
TConnectionPoints/TConnectionPoint (модуль AxCtrls). Что и подтвердилось в отладчике.

Как объяснить/исправить?

Примечание: экземпляры TConnectionPoints/TConnectionPoint создаются в методе
TCustomApplication.Initialize, который создан визардом, ничего особенного:


procedure TCustomApplication.Initialize;
begin
inherited Initialize;
FConnectionPoints := TConnectionPoints.Create(Self);
if AutoFactory.EventTypeInfo <> nil then
FConnectionPoint := FConnectionPoints.CreateConnectionPoint(
AutoFactory.EventIID, ckSingle, EventConnect)
else FConnectionPoint := nil;
end;


Что скажите "по поводу"?


 
vlad-mal ©   (2006-11-26 16:52) [1]

Наверное, из- за того, что выходной день, не дождался ответа. :)

Короче, шаманил я с оладчиком - ну не вызывается деструктор, хоть убейся.
И судя по коду - не должен вызываться.

Уж не знаю, правильно ли, но сделал так:
Добавил к своему классу :


 TCustomApplication = class(TAutoObject,
IConnectionPointContainer,      ICustomApplication)


public- метод:

 public
   procedure BeforeDestruction; override;


в котором просто:


procedure TCustomApplication.BeforeDestruction;
begin
 FConnectionPoints.Free;
 inherited;
end;


Теперь никакой утечки памяти не фиксируется.

Только как-то все странно это - код конструктора создан визардом, а разрушать "внутренние" объекы кто должен?

Всем спасибо.



Страницы: 1 вся ветка

Форум: "Corba";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
2-1262618923
Делфией
2010-01-04 18:28
2010.03.07
Не могу придумать как распознать в каком контроле вызван Аction


1-1239176461
MAcK
2009-04-08 11:41
2010.03.07
TXMLTransformClient


1-1220526665
evgenij
2008-09-04 15:11
2010.03.07
узнать запущена моя программа или нет


15-1261322445
oxffff
2009-12-20 18:20
2010.03.07
Сломать палец на ноге на ровном месте не проблема.


8-1180531137
Zeleniy
2007-05-30 17:18
2010.03.07
MediaPlayer и несколько файлов одного расширения.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский