Ще раз: не додавайте "Вирішено!" в заголовок питання, це не відноситься до питання взагалі. Решённость питання визначається наявністю галочки у одного з його відповідей. Якщо не можете поставити галочку зараз самі (термін давності не дозволяє), не потрібно відзначати іншими способами. Можуть і інші відповіді вчинити. - D-side 27 Березня о 11:47
Що стосується виключення - точне місце створення об'єкта, який не знищився може показати FastMM або EurekaLog. Наведений код робочий і в більшості випадків все правильно звільняється. (Нюанси описав нижче.) Швидше за все ви створюється TreeList і його не знищуєте (або чекаєте що його знищить батьківський об'єкт, а він не призначений).
Може я що щось упустив, але я не бачу звідки беруться дані для заповнення SecParams.
Якщо ви до моменту додавання створили SecParams - його потрібно знищити. Інакше буде витік.
Друга ділянка try..except. При виникненні виключення - об'єкт все-таки не знищиться.
Хоча теж не ясно, ну не обробились параметри, значить вони в неправильному форматі - об'єкт створиться, але з порожнім параметром ParamsLst. І якщо до нього звернеться без перевірки - буде Access Violation.
TObjData - є загальні правила коли з літери T починаються опису типів. F - для внутрішніх полів класу.
Для полів класу TMyObj потрібно явно вказати ідентифікатор видимості (private, public), а ще краще перенести їх в секцію private і дати доступ до полів за допомогою властивостей. наприклад:
@androshuk, ще раз спасибі! Спасибі всім за пропозиції, все врахував. З урахуванням Ваших пропозицій (зміна стилю коду), проблему вирішив звільненням ParamsLst: TStringList до звільнення TDataList (привласнення по старому коду). property ParamsLst: TStringList read FParamsLst ;. for i: = 0 to TObjData.Count - 1 do begin with TObjData.Items [i] do begin TObjData.Items [i] .ParamsLst.Free; end; end; // При видаленні списку залишилися в ньому об'єкти будуть вилучені. TObjData.Free ;. - Deda 26 Березня о 21:58
У коді немає жодного моменту заповнення змінної з дивним ім'ям TObjData. Але можу припустити, що OwnsObjects неправильно спрацьовує.
У фіналізації перед руйнуванням об'єкту TObjData краще зробити цикл перевірки вкладених в нього об'єктів та з'ясування з якої причини вони не звільняються до фіналізації.