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

請問 someVar:= nil; 之後,該 someVar 還佔有記憶體空間嗎?

尚未結案
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-04 10:40:49 IP:61.56.xxx.xxx 未訂閱
請問 someVar:= nil; 之後,該 someVar 還佔有記憶體空間嗎? 若想連此記憶體空間都釋放, 該怎麼作呢?
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-04 11:06:13 IP:61.30.xxx.xxx 未訂閱
你好: 如果是屬於介面物件,則只要將變數設為 nil 既可。 如果是屬於 Delphi 本身的元件,則需要使用 Free 等函 式釋放。 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-04 18:05:30 IP:61.56.xxx.xxx 未訂閱
那再請問若是用陣列儲存物件, ex: aArray: array[0..n] of SomeClass; 若是其中一筆想移除掉?是否需要先執行Free? 或是直接指定nil即可? 感謝 :)
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-04 20:46:26 IP:61.56.xxx.xxx 未訂閱
引言: aArray: array[0..n] of SomeClass; 若是其中一筆想移除掉?是否需要先執行Free? 或是直接指定nil即可?
追問一下: 移除後想要作合併的動作(將後面的資料往前移) 這時候還需要作free跟nil嗎?或是直接搬移即可(=原位址捨棄)? 又請問:下面的程式是犯了怎樣的邏輯錯誤?
  for i:= 1 to Count do
  begin    
    aArray[Candidate-1]:= aArray[Candidate];
    Inc(Candidate);
  end;
 
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-04 22:14:36 IP:61.56.xxx.xxx 未訂閱
你好: 有一個動態陣列的用法,請自行找 Delphi 的 Help,關鍵字是 "Dynamic arrays"。     你也可以使用 TStrings 或 TList 來當成動態的陣列會更好維護。 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-04 22:34:27 IP:61.229.xxx.xxx 未訂閱
在Delphi裡,像 var TsomeOJ : TObject; TsomeOJ只是個指標,所以才需要類似 TsomeOJ := TObject.Create; 這樣來使用物件,而不行直接呼叫 TsomeOJ.Create; //錯誤!    所以當把TsomeOJ := nil; 也只是把指標的指向拿掉,實體的物 件還在。    所以不管是用陣列,還是單一的變數, 建立的物件,請記得Free掉。 直接設 xxx := nil;是不行滴^^    ..-----------βλμε------------..
◎Oo月夜 光明 藍更愁oO◎
藍調月光城v4:http://inping.myweb.hinet.net/ (暫時使用中..) 明日報(藍調.月光):http://mypaper2.ttimes.com.tw/user/a6475
------
月夜 光明 藍更愁
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-05 01:20:19 IP:211.74.xxx.xxx 未訂閱
引言:
引言: aArray: array[0..n] of SomeClass; 若是其中一筆想移除掉?是否需要先執行Free? 或是直接指定nil即可?
追問一下: 移除後想要作合併的動作(將後面的資料往前移) 這時候還需要作free跟nil嗎?或是直接搬移即可(=原位址捨棄)? 又請問:下面的程式是犯了怎樣的邏輯錯誤?
  for i:= 1 to Count do
  begin    
    aArray[Candidate-1]:= aArray[Candidate];
    Inc(Candidate);
  end;
 
建立一個記憶體可用GetMem,用完記得使用FreeMem釋放, 記憶體大小可使用ReAllocMem修改.. 物件的話由Create建立,用完使用Free釋放,這樣才不會佔空間!! CopyMemory(@aArray[Candidate-1],@aArray[Candidate],(Count-Index)*Sizeof(SomeClass)); ReAllocMem(aArray,Count-1*Sizeof(SomeClass));
系統時間:2024-05-07 5:39:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!