Delphi結構中使用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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章