看板 Programming 關於我們 聯絡資訊
請問一個笨問題... 假設我有一個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
jtmh:(1) memset 不會幫你 release,所以這樣會造 218.175.136.66 12/25 11:30
jtmh:成 memory leak。 218.175.136.66 12/25 11:31
jtmh:(2) 你可以在 memset 後試著去存取動態 array 218.175.136.66 12/25 11:34
jtmh:的值看看。 218.175.136.66 12/25 11:34
jtmh:(補充) 你好像把動態 array 當成是 struct 的 218.175.136.66 12/25 11:35
jtmh:一部分,這點可能要再確認看看,我也不確定。 218.175.136.66 12/25 11:36
phterry:memset後,aiList就是0(亦即NULL),再去存 60.249.207.134 12/25 14:07
phterry:取的話,會Segmentation fault. 60.249.207.134 12/25 14:08
phterry:因此memset前要記得把aiList給free掉 60.249.207.134 12/25 14:09