Главная страница
    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.005 c
2-1262255716
Александр К
2009-12-31 13:35
2010.03.07
Помогите перевести с c++ в pas (Оочень маленький участок кода)


10-1163588110
312kbps
2006-11-15 13:55
2010.03.07
Получить конект через IDispatch !


15-1261603824
Юрий
2009-12-24 00:30
2010.03.07
С днем рождения ! 24 декабря 2009 четверг


2-1262076709
tipman
2009-12-29 11:51
2010.03.07
Узнать о завершении работы потока, как?


2-1261834445
Токи
2009-12-26 16:34
2010.03.07
Проблема с БД на парадоксе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский