Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2012, 05:57   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию EMultiFree. Как исправить ?

Доброго времени суток!

Имеется 4 класса, вот в таком представлении:
Цитата:
-TRulesManager(Контейнер для TRule) - наследник TList
--TRule(Контейнер для TTargetsList) - наследник TObject
---TTargetsList(Контейнер для TTarget) - наследник TList
----TTarget - наследник TObject
При уничтожении TRulesManager возникает EMultiFree(Multi Free memory leak).

Деструкторы наследуемых списков выглядят вот так:
Код:
destructor TTargetsList.Destroy;
var
  i: Integer;
begin
  for i := 0 to Count - 1 do
    Target[i].Free;
    inherited;
end;
Деструктор того, что храним вот так:
Код:
destructor TTarget.Destroy;
begin
  inherited;
end;
Есть идеи, как это лечить?
Человек_Борща вне форума Ответить с цитированием
Старый 09.06.2012, 07:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
--TRule(Контейнер для TTargetsList) - наследник TObject
---TTargetsList(Контейнер для TTarget) - наследник TList
Лучшие контейнеры для обьектов в Делфи это TObjectList и TComponentList из contnrs. ИСпользуя их проще следить за утечками, тогда если TTargetsList:TObjectList будет код сократится:
Код:
destructor TTargetsList.Destroy;
begin
    TargetList.Free;
    inherited;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2012, 09:05   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вылечил ObjectList'ом. Надо бы посмотреть нутно этого класса.
Человек_Борща вне форума Ответить с цитированием
Старый 11.06.2012, 21:49   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Кстати, я недолюбливаю TObjectList , его метод Clear не вызывает нотифай (одна внутренняя его вещь) в результате чего именно клиаром не чистятся(фри) объекты в нём. Лечил написанием наследника с перекрытым клиар.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исправить ? kiryxa(cyc) Помощь студентам 0 17.05.2012 09:49
Как исправить программу? andodge Visual C++ 0 28.03.2012 12:39
Как исправить............. trash1205 Microsoft Office Word 2 21.03.2012 12:56
как исправить! lexinvest Операционные системы общие вопросы 1 08.05.2011 18:03
Как исправить??? BlackMamba Microsoft Office Word 1 03.08.2008 12:23