線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1638
推到 Plurk!
推到 Facebook!

動態陣列之SetLength()之補充.

 
afdnblue
一般會員


發表:2
回覆:3
積分:1
註冊:2003-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-01 05:49:21 IP:203.69.xxx.xxx 未訂閱
今天花了點時間重新翻查了有關動態陣列的資料,在看到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吧,忘了??),動態變更陣列的大小好像在記憶體有破碎問題時,記憶體管理程式並不會自動幫我們保留陣列原有的內含值,做了這個測試後就放心多了. 對於這個問題,不知還能引伸出什麼問題呢??好期待哦.
系統時間:2024-07-01 13:21:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!