c语言数据结构用尾插法建立一个链表,求大神,不知哪错了

#include<stdio.h>#include<stdlib.h>#include<string.h>#definen100#defineelemchartypede... #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 100
#define elem char
typedef struct node
{
char a[n];
struct node *next;
}node,linklist;
int main()
{
int f=1;
char b[n];
linklist *L;node *p=NULL;
node *s,*r;
L=(linklist *)malloc(sizeof(node));
L->next=NULL;
r=L;
while(f)
{
s=(node *)malloc(sizeof(node));
s->next=NULL;
scanf("%s",b);
strcpy(s->a,b);
if(s->a[0]!='^')
{ r->next=s;
r=s;
}
else
f=0;
}
p=L;
while(p!=NULL)
{
puts(p->a);
puts(" ");
p=p->next;
}
p=L;
while(p->next!=NULL)
{
free(p);
p=p->next;
}
return 0;
}

运行一次,就出现图片的问题,怎么修改,帮忙编译一下
展开
 我来答
濮方雅BX
推荐于2016-01-09 · TA获得超过4042个赞
知道大有可为答主
回答量:2482
采纳率:60%
帮助的人:2461万
展开全部

p=L;

while(p!=NULL)

{

puts(p->a);

puts(" ");

p=p->next;

}

p=L;

while(p->next!=NULL)

{

free(p);

p=p->next;

}


改成 :

p=L->next;
while(p!=NULL)
{
puts(p->a);
puts(" ");
p=p->next;
}
p=L;
while(p!=NULL)
{

L=L->next;
free(p);
p=L;
}
追问
在释放空间的时候,是不是将L依次指向链表的下一个内容,在释放内存
追答
对,否则的话就得不到下一个内容了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
问额外我而去
2015-02-16 · TA获得超过838个赞
知道小有建树答主
回答量:802
采纳率:0%
帮助的人:464万
展开全部
最后一个循环处
你先释放了指针

free(p);
马上使用这个指针, 这不对啊
p=p->next;

释放了的变量已经没有内存了,你继续使用崩溃的哦,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式