C语言销毁结构体的一个对象为什 么不能直接用free函数?而是需要清空每一个字段?

例如定义:typedefstruct{ElemType*base;/*数组元素基址,由InitArray分配*/intdim;/*数组维数*/int*bounds;/*数... 例如定义 : typedef struct
{
ElemType *base; /* 数组元素基址,由InitArray分配 */
int dim; /* 数组维数 */
int *bounds; /* 数组维界基址,由InitArray分配 */
int *constants; /* 数组映象函数常量基址,由InitArray分配 */ typedef struct
}Array;

销毁时 :
Status DestroyArray(Array *A)
{ /* 销毁数组A */
if((*A).base)
{
free((*A).base);
(*A).base=NULL;
}
else
return ERROR;
if((*A).bounds)
{
free((*A).bounds);
(*A).bounds=NULL;
}
else
return ERROR;
if((*A).constants)
{
free((*A).constants);
(*A).constants=NULL;
}
else
return ERROR;
return OK;
}

为什么不能直接free(A);?
展开
 我来答
百度网友83cdc1c
2013-06-28 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:852万
展开全部
系统调用free释放内存时,是无法判断被释放的内存是否是个结构体,更无法知道结构体内有没有指针、这些指针有没有指向动态申请的内存。如果直接free(A),那么A.base等结构体内指针指向的内存就没有机会被释放,会导致内存泄漏。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式