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)为什么不出错? 展开
{
Node * psave;
while(*plist != NULL)
{
psave = (*plist)->next;
free(*plist);
*plist =psave;
}
前面是链表结构,动态内存
为什么用 free(*plist)这个? 而不是用free(psave)这个?
我用free(psave)为什么不出错? 展开
1个回答
展开全部
*plist是当前结构体 psave指向下一个 free(psave)在语法上是没有错的(排除psave可能就是Null 这种情况也是危险的) 第一次运行while的时候 由于psave free后是个不确定值 (C语言不一定为Null )导致*plist也成为了不确定值 第二次运行while的时候 若*plist为Null 程序未报错 但造成内存泄漏(除了链中第二个结构体 其他均未被释放) 若不为Null 给psave赋值会使程序产生不可知错误 纯手打 楼主记得给分…
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询