2 lmikic Lmikic 于 2016.02.22 16:39 提问

指针p和指针q同时指向一条链表h时free函数释放空间

大家好:
对于free()释放空间有个疑问:指针p和指针q同时指向一条链表h,即p=q=h,这时free(p),整条链被释放了吗?目前我的认识水平是这样的,free(p)后,就是告诉系统p所在的空间被释放了,系统可以再次利用这部分空间,虽然这部分空间的内容没有被破坏掉,还是可以用h和q来访问。但是若有其他申请空间的操作,这部分空间岂不是有被破坏的可能?
还望您能够批评指正!

1个回答

caozhy
caozhy   Ds   Rxr 2016.02.23 07:36
已采纳

释放的是内存,所以你有多个指针指向这个地址,那么它们同时失效了。虽然语法上可以用p q h访问,但是这样的结果是不可预测的。
如果是链表,只有这个节点被释放,它指向next指针的不会释放,如果释放了头节点,没有指针指向后继节点,那么再也没法释放它们,这就导致内存泄漏了。

Lmikic
Lmikic 非常感谢您的回答,受益匪浅。关于“链表中next指针的不会释放“这点我不太明白,能否再具体讲讲?我想到了这种情况,比如 h 指向一条链的头,p 和 q 指向这条链中间的某个不同地方,这时候释放 h,对 p q 有什么影响呢?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!