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

如何判斷指標有效與否?

尚未結案
jest0024
高階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-04 02:12:31 IP:211.74.xxx.xxx 未訂閱
var p1,p2:PInteger; procedure Test; begin GetMem(p1,Sizeof(Integer)); p2:=p1; //p2指向p1指標... FreeMem(p1); //現在p1值已設nil,但p2依舊指向p1之前的指標 //請問現在如何依照"p2"所指標判斷p2是無效的指標?! end;
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-04 09:09:20 IP:147.8.xxx.xxx 未訂閱
Short answer: You can't your code should prevent it from happening 
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-04 09:19:47 IP:218.80.xxx.xxx 未訂閱
P1,P2只是指向一个地址,在FreeMem(P1)后P1还是指向那个地址,只有写了P1:=nil后P1的指向地址才是0。你无法判断“无效的指针”,只能自己维护,FreeMem释放内存后,自己把指针设为nil,用是否nil来判断是否为“无效的指针”。     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
jest0024
高階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-04 17:53:24 IP:211.74.xxx.xxx 未訂閱
如果指標形態為物件呢!? var p1,p2:TObject; procedure Test; begin p1:=TObject.Create; p2:=p1; p1.Free; p1:=nil; //但目前p2還是指向p1之前的指標,如何判斷p2為無效的物件呢!? end;
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-04 20:45:15 IP:218.1.xxx.xxx 未訂閱
一样的,物件也是指针,物件摧毁时,要通知所有指向它的指针,改成指向0(nil)。如很多的元件引用外部元件时,用FreeNotification来要求外部元件摧毁时通知它,然后在Notification里就会收到这个通知,把对外部元件引用指针设为nil。     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
jest0024
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-05 01:09:48 IP:211.74.xxx.xxx 未訂閱
系統是如何建立一個可用的記憶體而不會產生記憶體衝突的呢!? 像我已經使用GetMem(p,24)劃分這塊記憶體為可用,系統便不會在重新 分配這塊記憶體給其他使用?系統是如何判斷的!?
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-05 10:44:29 IP:218.80.xxx.xxx 未訂閱
如何分配内存是OS管的,有一个叫MCB(内存控制块)的会标记内存块的开始、长度,保证不会重复分配。 你也可以监视内存的分配状况,具体看System.pas的 procedure GetMemoryManager(var MemMgr: TMemoryManager); procedure SetMemoryManager(const MemMgr: TMemoryManager);     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
系統時間:2024-05-06 20:49:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!