1. 程式人生 > >Delphi Setlength 內存釋放總結

Delphi Setlength 內存釋放總結

結構 nbsp bsp func 來源 UNC 被調用 tps button

https://blog.csdn.net/lotusyangjun/article/details/8203521

一、在Setlength 被調用次數不多時,可直接使用以下代碼進行釋放
var
aa: array of integer;

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
SetLength(aa, 1000);
for I := 0 to 999 do
begin
aa[I] := i;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SetLength(aa, 0);
end;
//這樣就OK 了
二、如果是作為臨時變量,賦值給Result作為函數的返回值時,此時除釋放bb外,還需釋放臨時變量aa。

type
Taa=array of Integer;

procedure TForm1.Button3Click(Sender: TObject);
var bb : Taa;
begin

bb := getaa;
SetLength(bb,0); //執行此行,內存無變化
end;


function TForm1.getaa:Taa;
var i : Integer;
begin
SetLength(aa,10000000); //如果采用SetLength(Result,10000000); 直接為Result賦值然後返回,則在上面Button3Click可釋放內存
for i := 0 to 10000000 - 1 do
begin
aa[i] := i + 1;
end;
Result := aa;
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
SetLength(aa,0); //執行此行,內存占用才減少
end;

三、當Setlength在for 或while 循環中使用,被頻繁調用很多次時,極易拋出EoutOfMemory異常。此時建議將setlengt拿到循環外部使用,或一次性調用,為動態數組或結構分配足夠大的空間。
---------------------
作者:北環陽光
來源:CSDN
原文:https://blog.csdn.net/lotusyangjun/article/details/8203521
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

Delphi Setlength 內存釋放總結