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

отредактировано 06:07 Раздел: Open Query Builder
1) Функция TfqbCore.GenerateSQL имеет локальную переменную SQL: TStringList.
Теперь смотрим код:
begin
  SQL := TStringList.Create; //<--!!
  //SELECT
  tmpStr := strSel;
  
  if Grid.Items.Count = 0 then Exit; //-->!!
...
Замечательно. :) Сохранили в локальной переменной созданный объект и свалили.

2) Неплохо бы убрать пустой экзепшен (когда SQL пустой, орёт по иностранному) типа :) так:
procedure TfqbDesigner.TabSheet3Show(Sender: TObject);
var s:string; //+!!
begin
  s:=fqbCore.GenerateSQL; //+!!
  if s='' then Exit; //+!!
  fqbCore.Engine.ResultDataSet.Close;
  fqbCore.Engine.SetSQL(s);
  fqbCore.Engine.ResultDataSet.Open;
end;

3) Напоминаю, что надо проверить, убрали ли меморилик:
В файле fqbClass.pas в методе TfqbDialog.Execute происходит безвозвратная утечка памяти. Я копипастил метод и немного изменил, утечка памяти прекратилась. Я думаю надо так:
function TfqbDialog.Execute: Boolean;
...
    else
      Result := false;

    fqbCore.Clear; //Без этого кода происходит Unexpected Memory Leak
  finally
...
end;

Комментарии

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

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