1.3.4 销毁一个链表
在链表使用完毕后建议销毁它,因为链表本身会占用内存空间。如果一个系统中使用很多的链表,而使用完毕后又不及时地销毁它,那么这些垃圾空间积累过多,最终可能导致内存的泄漏甚至程序的崩溃。因此应当养成及时销毁不用的链表的习惯。
下面给出销毁一个链表list的代码描述:
- void destroyLinkList(LinkList *list){
- LinkList p,q;
- p=*list;
- while(p){
- q=p->next;
- free(p);
- p=q;
- }
- *list=NULL;
- }
函数destroyLinkList()的作用是销毁一个链表list,它包括以下步骤。
(1)首先将*list的内容赋值给p,这样p也指向链表的第一个结点,成为了链表的表头。
(2)然后判断只要p不为空(NULL),就将p指向的下一个结点的指针(地址)赋值给q,并应用函数free()释放掉p所指向的结点,p再指向下一个结点。如此循环,直到链表为空为止。
(3)最后将*list的内容置为NULL,这样主函数中的链表list就为空了,防止了list变为野指针。而且链表在内存中也被完全地释放掉了。