利用二级指针进行释放单链表所有节点内存,并将指针赋值NULL

        因为子函数内接收的结构体指针“H”,其开辟内存在子函数的堆中,而主函数中链表H空间在主函数中的堆空间,无法修改到实参所存储的值(H->data:用户输入数值,H->next下一节点地址)。所以传参二级指针,通过解引用操作实参空间和值。

         错误写法:

        使用一级指针做参数,无法修改主函数里的实参H所存储的值,只能释放H所在空间,之后节点指针变成野指针。

       

        

        运行结果,通过p = H, H = H->next逐次将链表各个节点内存都free了。

        但由于p和H是两个不同的指针,p = NULL,而H所存储的的地址值仍未改动,还是存储的原先地址,而由于H空间被释放,所以链表上每个节点的指针都变成了野指针,所以遍历链表会出现段错误。

        正确写法

        二级指针linklist *p传参p,子函数用一级指针lingklist p操作*p

        linklist H 即node * H,一级指针

         linklist * h 即 node **h,二级指针

        记得二级指针在主函数中创建内存

        

        运行结果,通过p = *h,free(p)释放了主函数中单链表单个节点的堆空间,然后p =NULL将原先H存储地址赋值为NULL,杜绝了野指针。逐次循环,把链表节点空间依次释放,并将所有节点指针置NULL。遍历链表发现节点指针为NULL,弹出提示结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值