作者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
1F:推 jtmh:(1) memset 不会帮你 release,所以这样会造 218.175.136.66 12/25 11:30
2F:→ jtmh:成 memory leak。 218.175.136.66 12/25 11:31
3F:→ jtmh:(2) 你可以在 memset 後试着去存取动态 array 218.175.136.66 12/25 11:34
4F:→ jtmh:的值看看。 218.175.136.66 12/25 11:34
5F:→ jtmh:(补充) 你好像把动态 array 当成是 struct 的 218.175.136.66 12/25 11:35
6F:→ jtmh:一部分,这点可能要再确认看看,我也不确定。 218.175.136.66 12/25 11:36
7F:推 phterry:memset後,aiList就是0(亦即NULL),再去存 60.249.207.134 12/25 14:07
8F:→ phterry:取的话,会Segmentation fault. 60.249.207.134 12/25 14:08
9F:→ phterry:因此memset前要记得把aiList给free掉 60.249.207.134 12/25 14:09