一个链表的小问题
代码是创建一个链表,输入0的时候结束创建
将代码注释的地方p2改成p1就没事了。
我想知道的是,为什么会出现这种情况,我的理解是应该输出那个0啊。并且整个流程应该没有问题。还请大神详细的说道说道。 C 链表
[解决办法]
while(p2->num!=0)
{
n=n+1;
if(n==1)
{
head=p1;
}
else
{
p1->next=p2; ///////// 最后输入 0 之后,没有执行这里!!
p1=p2;
p2=(struct Student*)malloc(LEN);
scanf("%d",&p2->num);
}
}
p2->next=NULL;//将这里的p2改成p1之后就没事了
[解决办法]
如果不给它赋 NULL,想象一下,你输入的时候,上来就输 0 ,会发生什么
[解决办法]
struct Student* creat()
{
struct Student *p1,*p2,*head;
p1=p2=(struct Student*)malloc(LEN);
scanf("%d",&p2->num);
head=NULL; //这里为什么还要把head给NULL一下?
while(p2->num!=0)
{
也可以是一个空的链表吧
[解决办法]
问题出在这里:
p1->next=p2;
p1=p2;
p2=(struct Student*)malloc(LEN);
scanf("%d",&p2->num);
你让p1=p2后,
p1->next = p2->next,但是,p2经过malloc且while循环不再执行后,p1->next指向哪里?这就造成了野指针。