Убидительная просьба не давать ссылки опять на модуль с утечкой!
Показываю на примере, а то многие не понимают где там ошибка ннаписано 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; Компилим, запускаем, нажимаем кнопку и пытаемся закрыть приложение. При закрытии менеджер нас и "обрадует" своим сообщением.