Delphi Setlength 記憶體釋放總結

2022-03-13 10:23:39 字數 1735 閱讀 4896

setlength

功能說明:設定字串或動態陣列長度。該函式有兩個引數。第乙個引數為要設定的字串變數或動態陣列變數,第二個引數為指定的長度

參考例項:

vars: string;

arrtext: array of char; // 定義乙個動態陣列

begin

setlength(s, 10); // 當設定後,s變數只能賦值長度為10的字串。

setlength(arrtext, 10); // 只有使用setlength為動態陣列分配記憶體空間後才能使用動態陣列。這句**的作用相當於arrtext: array[0..9] of char

end;

一、在setlength 被呼叫次數不多時,可直接使用以下**進行釋放

[delphi]view plain

copy

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。

[delphi]view plain

copy

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拿到迴圈外部使用,或一次性呼叫,為動態陣列或結構分配足夠大的空間。

Delphi Setlength 記憶體釋放總結

setlength 功能說明 設定字串或動態陣列長度。該函式有兩個引數。第乙個引數為要設定的字串變數或動態陣列變數,第二個引數為指定的長度 參考例項 vars string arrtext array of char 定義乙個動態陣列 begin setlength s,10 當設定後,s變數只能賦...

mysql記憶體釋放 MySQL記憶體不釋放

歡迎進入linux社群論壇,與200萬技術人員互動交流 進入 連線了一下,並進行了一次查詢操作 root nj 245 thu apr 24 16 38 38 2014 information schema select count from client statistics count 5 1 ...

釋放記憶體總結

1.用new malloc顯式分配在堆上的記憶體才需要用delete free釋放,而在棧上分配的如int array 80 在子程式結束時自動釋放,分配與釋放都和資料型別無關。2.delete乙個指標的時候 一定要檢查是否為null,否則是個嚴重的應用程式錯誤.3.釋放乙個陣列要用delete 4...