Delphi结构中使用String时遇到的内存泄露问题,没有利用String的引用计数自动销毁字符串的功能

先定义一个结构:

TUserInfo = record

UserID: Integer; // 用户编号

UserName: string; // 用户名

end;

然后编写如下代码:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

User.UserName := StringOfChar('A', RandomRange(16*1024, 64*1024));

FillChar(User, SizeOf(User), 0);

end;

然后开启设置Timer间隔为20ms, 开启任务管理器就会发现内存暴涨,很显然结构中UserName使用的内存未被正确释放。

改成下面的代码就不会出现上述情况:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

User.UserName := StringOfChar('A', RandomRange(16*1024, 64*1024));

User.UserName := '';

end;

http://blog.csdn.net/missmecn/article/details/7097660