Утечка памяти
В модуле frxDsgnIntf есть переменная FObject: TfrxObjectCollection. Есть функция frxObjects, создающая экземпляр, если его нет, и возвращающая ссылку на него. В секции finalization переменная FObject освобождается:
Если финализация модуля frxDMPClass вызывается до финализации frxDsgnIntf, то все ОК. Если же наоборот, то происходит утечка экземпляра TfrxObjectCollection, так как он опять создается, но уже никем не освобождается.
if FObjects <> nil then
FObjects.Free;
FObjects := nil;
Есть модуль frxDMPClass, в котором в секции finalization три раза вызывается метод frxObjects.UnRegister.Если финализация модуля frxDMPClass вызывается до финализации frxDsgnIntf, то все ОК. Если же наоборот, то происходит утечка экземпляра TfrxObjectCollection, так как он опять создается, но уже никем не освобождается.
Комментарии
1. В модуль frxDsgnIntf добавляется функция
procedure FreefrxObjects;
begin
FreeAndNil(FObjects);
end;
2. В модуле frxDsgnIntf убирается код:
if FObjects <> nil then
FObjects.Free;
FObjects := nil;
3. В модуле frxDMPClass в секцию finalization последней строкой добавляется код
FreefrxObjects;