![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi 2009-2010, утекает память в записях [WinXP]
gosha52 © (2009-09-03 15:46:00)Здравствуйте уважаемые,
Хотел узнать у вас, как лечить утечку памяти в случаях, когда в записе есть строки? Покажу простой пример,
TMyRec = record
MyStr1: string;
end;
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
MyRec: TMyRec;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := True;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
ZeroMemory(@MyRec, SizeOf(TMyRec));
MyRec.MyStr1 := 'daskjdaslkjdlasjdвфывфыskl';
end;
Достаточно кликнуть по кнопке два раза, чтобы после закрытия программы FastMM указал на утечку. Если не вызывать ZeroMemory, то всё как бы работает. Даже работает если перед вызовом ZeroMemory вписать строку MyRec.MyStr1 := '', которая по идее вручную очищает память строки. Можно конечно использовать строку с заранее заданной длиной типа ShortString, но мне так неудобно. Да и в старой доброй D7 таких проблем не было. Даже с AnsiString происходит данная утечка в D2009-2010. Помогите разобраться, что не так.
Спасибо.
Leonid Troyanovsky (2009-09-03 16:05:00) [21]
> gosha52 (03.09.09 15:46)
> программы FastMM указал на утечку. Если не вызывать ZeroMemory,
> то всё как бы работает.
Не очень понятно, зачем потребовалось ZM, бо поля объектов
инициализируются автоматом, причем естественным способом
(RTFM: huge string).
Затем непонятно, зачем потребовались такие чудные record
из одной строки. Ну, т.д.
--
Regards, LVT.
Омлет (2009-09-03 16:04:00) [22]> ZeroMemory(@MyRec, SizeOf(TMyRec));
Жуть. Ты зачем это вообще делаешь?