記憶體釋放問題 |
尚未結案
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
#include為什麼free(str); 後 printf("%p\n",&str); printf("%s",str); str位址 & 字串都還存在?? 懂得朋友可以解惑一下嗎?? 謝謝 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
syao 您好: 您將配置的空間 free 掉之後,並不代表著該位置的資料會被 "清空" 或者是 "消失掉",這個動作僅僅是是告訴系統:"原先配置的空間可以再被使用了",就好比說;您開了一輛車子到停車場,並將車子停在某個車位上,於是您的車子佔用了這個空間 (malloc),別人可以將車子停到其它的車位,但是不能停在您現在停車的位置,但是當您將車子開走之後 (free),其他人就可以將車子停到您原先停車的位置了,儘管如此;原先那個車位的空間並不會因此而消失掉,地上的油污也不會因為您將車子開走就自動的被清除掉,除非有人去清洗過。 7 天天敲鍵盤 v 時時按滑鼠 8
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
#include請問為什麼我想把釋放的空間清成字元C memset(str,'C',49); 為什麼我編譯後執行後會發生錯誤 |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
syao 您好: 原本在變數被 free 掉之後,就不應該再對該變數原先的使用空間做存取,我前一篇提到 memset 只是針對您的提問做個說明而已,但是這終究不是正規的作法,希望您僅僅是純討論,而不是打算拿來實作,為了避免您及其他看倌產生誤解,我再強調:以下說法純屬討論。 就算您將空間釋回之後,要以 memset() 來做測試好了,或許應該要以原先已經實際填寫過內容的空間為對象,如果您的測試方式改為下列這個樣子大概就不會產生錯誤了:
memset(str, 'C', strlen(str));
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/10/28 09:47:58
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |