[問題] 請問 memory release 的問題

看板Programming作者 (月)時間15年前 (2009/12/25 11:19), 編輯推噓2(207)
留言9則, 2人參與, 最新討論串1/1
請問一個笨問題... 假設我有一個struct typedef struct { int iID; int* aiList; }STRUCT_A; void main() { STRUCT_A tA; //initial struct tA tA.iID = 100; ta.aiList = (int*)calloc(5, sizeof(int)); //..... //reset struct tA memset(&tA, 0, sizeof(structA;)); ==>經過這個後,struct 的element 都會被設成 0 包括動態 array : aiList 我的問題是: (1) 經過memset 後,這個 aiList 的 memory 有被 release 嗎? 正常的 release 會寫成 if (aiList) free(aiList); aiList = NULL; 經過memset 成0後,等於是少了free的動作,直接把指標設成0 那原本 aiList 的memory 是不是會一直被佔住直到程式結束? 也就是說,等於是 aiList 的 address 被設成0,但它的 aiList 的 element 仍然還在? (2) 如果我要驗證上面這件事,請問要怎麼做? 我試過先把 aiList 的 address 記下來...不過好像不是這樣呴 ...XD } 謝謝各位 :) -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.251.142.155

12/25 11:30, , 1F
(1) memset 不會幫你 release,所以這樣會造
12/25 11:30, 1F

12/25 11:31, , 2F
成 memory leak。
12/25 11:31, 2F

12/25 11:34, , 3F
(2) 你可以在 memset 後試著去存取動態 array
12/25 11:34, 3F

12/25 11:34, , 4F
的值看看。
12/25 11:34, 4F

12/25 11:35, , 5F
(補充) 你好像把動態 array 當成是 struct 的
12/25 11:35, 5F

12/25 11:36, , 6F
一部分,這點可能要再確認看看,我也不確定。
12/25 11:36, 6F

12/25 14:07, , 7F
memset後,aiList就是0(亦即NULL),再去存
12/25 14:07, 7F

12/25 14:08, , 8F
取的話,會Segmentation fault.
12/25 14:08, 8F

12/25 14:09, , 9F
因此memset前要記得把aiList給free掉
12/25 14:09, 9F
文章代碼(AID): #1BD2ygGf (Programming)
文章代碼(AID): #1BD2ygGf (Programming)