本文目录
C语言释放链表内存的问题
把链表创建的函数贴出来。否则难以判断。还有LNode 和LinkList的类型定义贴出来再请求一次,把LNode 和LinkList的类型定义贴出来! 从 L-》next;的用法,我推测LinkList是一个结构体指针类型,,作用是指向链表头。可是你在malloc的时候,用的sizeof(LinkList)),也就是对指针类型取size,通常固定是4,也就是说的你原意是要申请一个结构体大小的buff,结果是申请到一个指针大小的buf 如果LinkList是一个结构体类型,而不是指针类型,那么s=L 这样的语句就是彻底错误的,要知道void ListFree(LinkList L),这里的L是局部变量,进入函数时从堆栈中得到的,而不是你malloc出来的。所以你的free一定是失败的。
C语言链表问题free
清除链表是需要两根指针前后走的,可以看成是一个“过河拆桥”的过程 1)首先让两个指针p,q指向链表头; 2)然后让p指向q的next; 3)free掉q所指向的节点; 4)q指向p; 5)判断p是否为空,如果空,结束循环,否则转2)。
c语言中free(q)如果q是一个链表的头指针,那么效果是将链表的所有结点解放吗
不是...只是释放当时链表所指向的内存空间如果没有保存原先链表的下一个节点,就会失去整个链表的控制,从而导致内存泄漏!
C语言中如何用free清除一串链表
#include 《stdio.h》#include 《stdlib.h》struct Node{ int con; Node *next;};Node* insert(Node *h,int a,int pos)//这里,增加返回类型{ Node *p=(Node *)malloc(sizeof(Node)); Node *pt=h; if (pos==0) { p-》con=a; p-》next=h; h = p; } else { for(int i=1;i《pos;i++)//这里,如果pos值输入大于节点个数,会导致越界,自己修改 { pt=pt-》next; } p-》con=a; p-》next = pt-》next; pt-》next=p; } return h;//这里,返回地址}int main(){ int i; int count=0; puts("Enter num"); scanf("%d",&i); Node *p=( Node *)malloc(sizeof( Node)); Node *head=p; p-》next=NULL; p-》con=i; Node *c=head; puts("Next one,nonnum to stop"); while(scanf("%d",&i)==1) { fflush(stdin); p=(struct Node*)malloc(sizeof(struct Node)); p-》con=i; c-》next=p; p-》next=NULL; c=p; puts("Next one,nonnum to stop"); } fflush(stdin); int a,pos; puts("insert a at pos"); scanf("%d %d",&a,&pos); head = insert(head,a,pos);//这里,地址传出来 c=head; while(c!=NULL) { printf("%d %d\n",count,c-》con); count++; c=c-》next; } c=head; Node *tmp; while(c!=NULL)//here,多了个分号,内存释放需要改 { tmp = c; c=c-》next; free(tmp); } return 0;}