c语言 链表结构,动态内存free问题为什么释放内存空间不是指向psave?而是指向当前结点 *plist击?

voidEmptyTheList(List*plist){Node*psave;while(*plist!=NULL){psave=(*plist)->next;free... void EmptyTheList(List * plist)
{
Node * psave;

while(*plist != NULL)
{
psave = (*plist)->next;
free(*plist);
*plist =psave;

}
前面是链表结构,动态内存
为什么用 free(*plist)这个? 而不是用free(psave)这个?
我用free(psave)为什么不出错?
展开
 我来答
lemon潞
2014-12-14 · 超过15用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:31.2万
展开全部
*plist是当前结构体 psave指向下一个 free(psave)在语法上是没有错的(排除psave可能就是Null 这种情况也是危险的) 第一次运行while的时候 由于psave free后是个不确定值 (C语言不一定为Null )导致*plist也成为了不确定值 第二次运行while的时候 若*plist为Null 程序未报错 但造成内存泄漏(除了链中第二个结构体 其他均未被释放) 若不为Null 给psave赋值会使程序产生不可知错误 纯手打 楼主记得给分…
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式