Din nou: nu adăugați "Rezolvată!" în titlul întrebării, acest lucru nu se aplică întrebării. Rezolvarea problemei este determinată de prezența unei cătușe într-unul din răspunsurile sale. Dacă nu puteți să bifați acum (termenul de prescripție nu permite acest lucru), nu este necesar să îl marcați în alte moduri. Pot exista și alte răspunsuri. - D-side Mar 27, la 11:47
În ceea ce privește excepția - locul exact al creării unui obiect care nu a fost distrus poate fi demonstrat de FastMM sau EurekaLog. Codul dat funcționează și în majoritatea cazurilor totul este eliberat corect. (Nuanțele descrise mai jos.) Cel mai probabil creați un TreeList și nu-l distrugeți (sau vă așteptați ca acesta să fie distrus de obiectul părinte și nu este atribuit).
Poate că am pierdut ceva, dar nu văd de unde provin datele pentru a umple SecParams.
Dacă ați creat SecParams înainte de adăugare, trebuie să o distrugeți. În caz contrar, va exista o scurgere.
Cel de-al doilea site este try..except. Dacă apare o excepție, obiectul nu va fi distrus.
Deși, de asemenea, nu este clar, parametrii nu au fost procesați, atunci sunt în format greșit - obiectul va fi creat, dar cu parametrul Parametru gol. Și dacă la aceasta se va adresa fără verificare - va exista încălcarea accesului.
TObjData - există reguli generale atunci când tipul T începe descrierile de tip. F pentru câmpurile de clasă internă.
Pentru domeniile de clasă TMyObj, trebuie să specificați în mod explicit identificatorul vizibilității (privat, public) sau mai bine, transferându-le în continuare în secțiunea privată și oferind acces la câmpuri care utilizează proprietăți. De exemplu:
@androshuk, mulțumesc din nou! Vă mulțumesc tuturor pentru sugestii, totul a fost luat în considerare. Luând în considerare sugestiile tale (schimbarea stilului de cod), a rezolvat problema eliberării ParamsLst: TStringList pentru a elibera TDataList (atribuirea codului vechi). Proprietăți ParamsLst: TStringList citește FParamsLst; pentru i: = 0 până la TObjData.Count - 1 se începe cu TObjData.Items [i] se începe TObjData.Items [i] .ParamsLst.Free; se încheie; se încheie; // Când ștergeți o listă, obiectele care rămân în ea vor fi șterse. TObjData.Free;. - Deda pe 26 martie la 21:58
În cod nu există un singur moment de umplere a variabilei cu numele ciudat TObjData. Dar pot să presupun că OwnsObjects nu funcționează corect.
În finalizarea înainte de a distruge obiectul TObjData, este mai bine să faceți un ciclu de scanare a obiectelor închise în el și să aflați de ce nu sunt lansate înainte de finalizare.