作者everydate (月)
看板Programming
標題[問題] 請問 memory release 的問題
時間Fri Dec 25 11:19:03 2009
請問一個笨問題...
假設我有一個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