全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1776
推到 Plurk!
推到 Facebook!

請問getcomputername

尚未結案
jichang
一般會員


發表:9
回覆:12
積分:4
註冊:2004-02-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-28 17:10:43 IP:202.39.xxx.xxx 未訂閱
各位大大: 小弟初用Delphi,有很多地方不太會,想請問,當小弟在下列程式少了 GetMem(CName, CSize); 一行時,執行時並沒有任何錯誤,但當要關閉畫面時,卻出現錯誤訊息, Exception EAcessViolation in Module tmpfrm.exe at 0001B153. 想請問這是什麼原因? procedure tmpfrm.GetInfor; var CName : PChar; CSize : DWord; begin CSize := 255; GetMem(CName, CSize); if getcomputername(CName, CSize) then label5.Caption := CName else label5.Caption := 'Unkown'; end;
jest0024
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-28 17:21:49 IP:61.60.xxx.xxx 未訂閱
引言: 各位大大: 小弟初用Delphi,有很多地方不太會,想請問,當小弟在下列程式少了 GetMem(CName, CSize); 一行時,執行時並沒有任何錯誤,但當要關閉畫面時,卻出現錯誤訊息, Exception EAcessViolation in Module tmpfrm.exe at 0001B153. 想請問這是什麼原因? procedure tmpfrm.GetInfor; var CName : PChar; CSize : DWord; begin CSize := 255; GetMem(CName, CSize); if getcomputername(CName, CSize) then label5.Caption := CName else label5.Caption := 'Unkown'; FreeMem(CName); //記得釋放記憶體!! end;
應該不是這兒發生的錯誤吧!? 是不是你在Destroy事件或是關閉的事件中有使用已經釋放掉的物件!? 學而時習之不亦樂乎!
babyfish4
一般會員


發表:2
回覆:40
積分:18
註冊:2003-08-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-28 17:27:18 IP:61.63.xxx.xxx 未訂閱
引言: 各位大大: 小弟初用Delphi,有很多地方不太會,想請問,當小弟在下列程式少了 GetMem(CName, CSize); 一行時,執行時並沒有任何錯誤,但當要關閉畫面時,卻出現錯誤訊息, Exception EAcessViolation in Module tmpfrm.exe at 0001B153. 想請問這是什麼原因? procedure tmpfrm.GetInfor; var CName : PChar; CSize : DWord; begin CSize := 255; GetMem(CName, CSize); if getcomputername(CName, CSize) then label5.Caption := CName else label5.Caption := 'Unkown'; FreeMem(CName,CSize)//加入這行; //Delphi 5,6 不加此行執行不會有錯誤訊息 //可是用Delphi 7 不加此行執行會有錯誤訊息 end;
jichang
一般會員


發表:9
回覆:12
積分:4
註冊:2004-02-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-28 17:58:44 IP:202.39.xxx.xxx 未訂閱
各位大大,大家誤會了,我不是說FreeMem(CName)那行,我是說少了GetMem(CName, CSize),不過托大家的福,我知道要FreeMem(Mem)了,感激感激,再請大家幫我解惑一下,謝謝。
jest0024
高階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-28 19:28:37 IP:211.74.xxx.xxx 未訂閱
引言: 各位大大,大家誤會了,我不是說FreeMem(CName)那行,我是說少了GetMem(CName, CSize),不過托大家的福,我知道要FreeMem(Mem)了,感激感激,再請大家幫我解惑一下,謝謝。
既然少了GetMem(CName, CSize)這一行!? 那CName是代表什麼意思呢!?...指向一個未知的指標!! 既然都已指向未知指標了,還能發生什麼錯誤?指標是要靠自己維護的.. 另一種宣告 var CName : Array[0..255]of Char; 學而時習之不亦樂乎!
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-30 09:33:25 IP:219.129.xxx.xxx 未訂閱
jichang 你好: PChar 是个指向字符串的指针,你在声明后没有分配空间就使用,当然会出错了。内存地址越界。为此,如果你要用PChar必须注意它的地址空间分配问题。 所以你必须使用GetMem(CName, CSize);为CNmae为配一个空间供其使用,不用就会出错,当然最后还得释放其空间。 也即FreeMem(CName); ——行径窄处,留一步与人行—— ===== 为什么,经过多年以后,得失的过程如此冷漠 为什么,经过多年以后,风干的伤口心痛依旧
jichang
一般會員


發表:9
回覆:12
積分:4
註冊:2004-02-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-31 10:10:42 IP:202.39.xxx.xxx 未訂閱
感激各位的說明,由於分數只能給一人,而deity說明的比較清楚,因此小弟將分數給deity,但仍感激各位,謝謝。
系統時間:2024-05-15 16:56:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!