Нужно ли делать ObjectName.Free при закрытии формы?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Нужно ли делать ObjectName.Free при закрытии формы?

Сообщение GAMER »

При создании формы делается SG1 := TStringGrid.Create(nil);
Нужно ли делать в FormClose - SG1.Free;? Или оно само грохнется при закрытии формы?

В описании:

Код: Выделить всё

   ...........
   private
    { private declarations }
    SG1: TStringGrid;   
  ............


В FormClose записано:

Код: Выделить всё

  CloseAction := caFree;  


Вопрос возник в связи с AV, когда с данной формы открываются еще формы.
Когда есть SG1.Free; возникает AV здесь:

Код: Выделить всё

procedure TApplication.DoIdleActions;
var
  i: Integer;
  CurForm: TCustomForm;
  AForm: TForm;
begin
  i := 0;
  while i < Screen.CustomFormCount do begin { While loop to allow number of forms to change during loop }
    CurForm:=Screen.CustomForms[i];
    if CurForm.HandleAllocated and CurForm.Visible and CurForm.Enabled then
      CurForm.UpdateActions;
    Inc(i);
  end;
  if (FFormList<>nil) then begin
    for i:=0 to FFormList.Count-1 do begin
      AForm:=TForm(FFormList[i]);
      if AForm.FormStyle=fsSplash then <---------здесь
        AForm.Hide;
    end;
  end;
end;
 

Обсуждение даного AV в соседней ветке.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

GAMER писал(а):SG1 := TStringGrid.Create(nil);

Если Вы не определили кому пренадлежит грид (nil), значит его никто не уничтожит. Другое дело, если Вы его во время исполнения, вдруг, определили кому-то...
Ответить