動態陣列之SetLength()之補充. |
|
afdnblue
一般會員 發表:2 回覆:3 積分:1 註冊:2003-05-05 發送簡訊給我 |
今天花了點時間重新翻查了有關動態陣列的資料,在看到SetLength()函式說明時
突然想到一個問題,那就是在一般情形下如果我們先動態宣告了A陣列,之後又動態變動A陣列的大小,A陣列可以正常的變大或變小,其內容值都可保有原值,並不會因為改變陣列大小而有所變化。 那如果今天是記憶體破碎的情形下,A陣列如果要變長(增加維度)的話?記憶體管理程式,就必須搬移A陣列的位置,才能給予A陣列足夠的長度(維度)的話?那其原有的內含值是否還能保有呢? 我做了一個小的測試程式如下:
procedure TForm1.Button1Click(Sender: TObject);
var
A,B,C: array of Integer;
I: integer;
begin
SetLength(A,4);
SetLength(B,4);
SetLength(C,4);
For I:=0 to 3 do
begin
A[I] := I;
B[I] := I;
C[I] := I
end; ShowMessage(IntToStr(Integer(A))); //顯示 13450588
ShowMessage(IntToStr(Integer(B))); //顯示 13450616
ShowMessage(IntToStr(Integer(C))); //顯示 13450644 SetLength(A,8); //動態變更A陣列的大小 ShowMessage(IntToStr(Integer(A))); //顯示 13450918
For I:=0 to 7 do
ShowMessage(IntToStr(A[I])); //
end; 測試後發現,A陣列在動態增加長度(維度)後,記憶體管理程式會重新配置一個記憶體給它(位置變更了).而A陣列原有的內含值均有保留. 會有這個擬問是因為之前在使用其他語言時(好像是C吧,忘了??),動態變更陣列的大小好像在記憶體有破碎問題時,記憶體管理程式並不會自動幫我們保留陣列原有的內含值,做了這個測試後就放心多了.
對於這個問題,不知還能引伸出什麼問題呢??好期待哦.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |