Re: Выгребаем очередные баги из EhLib, Окно поиска

2006-08-25 Пенетрантность Konstantin R. Beliaev


Alexandr.Salnikov wrote:

Убидительная просьба не давать ссылки
опять на модуль с утечкой!

Исправил
http://konstb.newmail.ru/delphi/EhLibFIB.zip
Похоже, TVarRec вообще очень опасный тип, т.к. использование команды 
Dataset.InsertRecord([1,'MyStr']) (InsertRecord принимает на вход array 
of TVarRec) также приводит к утечкам :-((




Если кто-то до сихпор не верит, что это
приводит к утечкам, то пишим
элементарный пример на BDS2006 (на 2006, т.к.
в нем можно сказать менеджеру памяти
сообщать об утечках)
Достаточно подключить FastMM к любому Delphi  4.0 вместо стандартного 
менеджера памяти

http://fastmm.sourceforge.net/



Re: Выгребаем очередные баги из EhLib, Окно поиска

2006-08-16 Пенетрантность Konstantin R. Beliaev


Vladimir A.Bakhvaloff wrote:

Лучше б дал ссылку на http://alexandr-s.livejournal.com/489.html


Не знаю, почему Большаков кладет в дистрибут такую старую версию, здесь:
http://konstb.newmail.ru/delphi/EhLibFIB.zip
есть и фильтрация, и вроде утечек быть не должно (на 4-ке однако не 
проверял, нету ее у меня).




Re: Выгребаем очередные баги из EhLib, Окно поиска

2006-08-16 Пенетрантность Alexandr.Salnikov
Убидительная просьба не давать ссылки
опять на модуль с утечкой!

Показываю на примере, а то многие не
понимают где там ошибка
ннаписано
fld[i].VType:=vtAnsiString;
string(fld[i].VString):=Grid.SortMarkedColumns[i].fieldname;

А теперь смотрим описание TVarRect
TVarRec = record { do not pack this record; it is compiler-generated }
case Byte of
  vtInteger:(VInteger: Integer; VType: Byte);
  vtBoolean:(VBoolean: Boolean);
  vtChar:   (VChar: Char);
  vtExtended:   (VExtended: PExtended);
  vtString: (VString: PShortString);
  vtPointer:(VPointer: Pointer);
  vtPChar:  (VPChar: PChar);
  vtObject: (VObject: TObject);
  vtClass:  (VClass: TClass);
  vtWideChar:   (VWideChar: WideChar);
  vtPWideChar:  (VPWideChar: PWideChar);
  vtAnsiString: (VAnsiString: Pointer);
  vtCurrency:   (VCurrency: PCurrency);
  vtVariant:(VVariant: PVariant);
  vtInterface:  (VInterface: Pointer);
  vtWideString: (VWideString: Pointer);
  vtInt64:  (VInt64: PInt64);
  end;

Из него видем, что vtAnsiString это
указатель, на AnsiString, а мы туда пытаемся
запихнуть VString, который является
PShortString;

Если кто-то до сихпор не верит, что это
приводит к утечкам, то пишим
элементарный пример на BDS2006 (на 2006, т.к.
в нем можно сказать менеджеру памяти
сообщать об утечках)

procedure TForm1.Button1Click(Sender: TObject);
var FLD  : array of TVarRec ;
begin
  setlength(fld,1);
  fld[0].VType:=vtAnsiString;
  string(fld[0].VString):= Self.Caption;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutdown := DebugHook  0;
end;

Компилим, запускаем, нажимаем кнопку и
пытаемся закрыть приложение. При
закрытии менеджер нас и обрадует
своим сообщением.


Re: Выгребаем очередные баги из EhLib, Окно поиска

2006-08-13 Пенетрантность Oleg_M
 EhLib

Эх либ
как вы лодку назовете... ?