Главная страница
    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.01 c
2-1262618923
Делфией
2010-01-04 18:28
2010.03.07
Не могу придумать как распознать в каком контроле вызван Аction


15-1261494235
Piter
2009-12-22 18:03
2010.03.07
Ошибка в книге Тейксейра и Пачеко?


2-1262196060
Ivan
2009-12-30 21:01
2010.03.07
Вопрос по скроллингу


9-1183152132
ElectriC
2007-06-30 01:22
2010.03.07
Мобильные игры


2-1262457629
Lordalexander
2010-01-02 21:40
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский