Утечка памяти

отредактировано 16:36 Раздел: FastReport 4.0
В модуле frxDsgnIntf есть переменная FObject: TfrxObjectCollection. Есть функция frxObjects, создающая экземпляр, если его нет, и возвращающая ссылку на него. В секции finalization переменная FObject освобождается:
  if FObjects <> nil then
    FObjects.Free;
  FObjects := nil;
Есть модуль frxDMPClass, в котором в секции finalization три раза вызывается метод frxObjects.UnRegister.

Если финализация модуля frxDMPClass вызывается до финализации frxDsgnIntf, то все ОК. Если же наоборот, то происходит утечка экземпляра TfrxObjectCollection, так как он опять создается, но уже никем не освобождается.

Комментарии

  • отредактировано 16:36
    Прошло 6 лет, а баг и ныне там. Будет ли он исправлен?
  • отредактировано 16:36
    Прикладываю фикс:
    1. В модуль frxDsgnIntf добавляется функция
    procedure FreefrxObjects;
    begin
    FreeAndNil(FObjects);
    end;

    2. В модуле frxDsgnIntf убирается код:
    if FObjects <> nil then
    FObjects.Free;
    FObjects := nil;

    3. В модуле frxDMPClass в секцию finalization последней строкой добавляется код
    FreefrxObjects;

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.