Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не получается понять почему утечка / 15 сообщений из 15, страница 1 из 1
23.05.2021, 20:22
    #40072320
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
Всем доброго дня,

на фрейме лежит combobox
в него запихиваются обьекты TSelectIDNAME:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
TSelectIDNAME = class(TObject)
  public
  nID: integer;
  sID: string;
  sNAME: string;
  Constructor Create(Id_INT: integer; ID_STR,NAME: string); overload;
end;   

constructor TSelectIDNAME.Create(Id_INT: integer; Id_STR, NAME: string);
begin
  inherited Create;
  nID := Id_INT;
  sID := Id_STR;
  sName := NAME;
end;


всё это запихивается таким образом в combonbox:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   oCbb.Items.Clear;
   oCbb.Clear;  
................
        Q_TMP.First;
        while not Q_TMP.Eof do
        begin
        oCbb.AddItem(Q_TMP.FieldByName('NAME').AsString,
                        TSelectIDNAME.Create(Q_TMP.FieldByName('SEL_ID_INT').AsInteger,
                        Q_TMP.FieldByName('SEL_ID_CHAR').AsString,
                        Q_TMP.FieldByName('NAME').AsString));

        Q_TMP.Next;
        end;
 ..............


всё работает но в итоге получаю утечку в AddItem.
Не могу понять почему. По идее тут же ненадо все эти добавленные обекты потом руками удалять если combobox лежит на фрейме и по идее при уничточении должен их сам удалять.

Спасибо
...
Рейтинг: 0 / 0
23.05.2021, 20:23
    #40072321
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
забыл добавить что это 2.0.10й лазарус, lcl
...
Рейтинг: 0 / 0
23.05.2021, 20:48
    #40072322
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
hlopotun
По идее тут же ненадо все эти добавленные обекты потом руками удалять
По твоей идее?
У тебя плохая идея.
Никто за тебя удалять ничего твоего не будет. К твоему же счастью.
...
Рейтинг: 0 / 0
23.05.2021, 20:59
    #40072324
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
YuRock,

нашел тут обсуждение похожей проблемы. Походу причина кроется в самом фрейме. И в том как он создаётся.
В данном случае динамически кладётся в TPanel:
Код: pascal
1.
2.
3.
4.
     ......
     lnFound := pnlFirmsDoc.ControlCount;
     pnlFirmsDoc.InsertControl(TDocumentsList.Create(pnlFirmsDoc), lnFound);
     ......
...
Рейтинг: 0 / 0
23.05.2021, 21:01
    #40072325
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
Нет. Надо вручную удалять.
...
Рейтинг: 0 / 0
23.05.2021, 21:02
    #40072326
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
Стринглист не является владельем объектов которые в нем могкт лежать.
...
Рейтинг: 0 / 0
23.05.2021, 21:04
    #40072328
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
если создание фрейма переделать так то проблема уходит:
pnlFirmsDoc.InsertControl(TDocumentsList.Create( Application.MainForm ), lnFound);
...
Рейтинг: 0 / 0
23.05.2021, 21:53
    #40072330
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
hlopotun
если создание фрейма переделать так то проблема уходит:
pnlFirmsDoc.InsertControl(TDocumentsList.Create( Application.MainForm ), lnFound);

к сожалению так похоже нельзя (добавлять фрейм в панель и передавать при этом ему основную форму).
Походу прийдётся переопределить TComboBox и самому начинать его чистить при уничтожении.
Что то у Фрейма с уничтожением вложенных обьектов не срабатывает если он сам динамически создан и добавлен в контейнер.
...
Рейтинг: 0 / 0
23.05.2021, 21:59
    #40072331
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
hlopotun
Походу причина кроется в самом фрейме.
Нет, причина в непонимании тобою элементарной логики, что никто не должен (т.к. этого делать ни в коем случае нельзя) очищать данные по ссылкам, которые неизвестно, когда были созданы и неизвестно, когда должны быть удалены.
...
Рейтинг: 0 / 0
23.05.2021, 22:05
    #40072332
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
hlopotun> к сожалению так похоже нельзя

Ты не понимаешь базовых основ - что такое
объект, ссылка на него, список элементов,
список с элементами-ссылками и т.д.

Почитай книги (пару соотв. глав), это недолго.
Без понимания основ методом тыка учиться
будешь дольше и хуже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
23.05.2021, 23:26
    #40072343
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
Гаджимурадов Рустам,

да вроде понимаю :)
тут просто тормознул.
Почему то думал что Combobox должен сам чистить свои обьекты, но если подумать чистить их самому нельзя и опасно итп. т.к. очистка может быть специфичнее вызова free итп.
...
Рейтинг: 0 / 0
23.05.2021, 23:35
    #40072345
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
hlopotun,

Внезапно в Item.Objects могут быть вообще не объекты.
Я вот туда часто integer-ы присваиваю.
...
Рейтинг: 0 / 0
24.05.2021, 00:27
    #40072350
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
rgreatЯ вот туда часто integer-ы присваиваю.

Более того, оно и на уровне API - просто число. Но попробуй для развлечения загнать туда -1.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2021, 00:49
    #40072352
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
hlopotun
Почему то думал что Combobox должен сам чистить свои обьекты

если я правильно ошибаюсь, это могут делать дженерики
...
Рейтинг: 0 / 0
24.05.2021, 01:12
    #40072354
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается понять почему утечка
Док
hlopotun
Почему то думал что Combobox должен сам чистить свои обьекты

если я правильно ошибаюсь, это могут делать дженерики

да, можно себе такое представить.
Но сегодня уже спать. В сотне мест пришлось подчистить.
Зато утечки ушли. Благо решил проверить, как то на лазарусных проектах руки не доходили.
К счастью только с комбобоксами накосячил, в остальном чисто.
Всем спасибо за участие!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не получается понять почему утечка / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]