首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个链表的小疑点

2013-11-29 
一个链表的小问题代码是创建一个链表,输入0的时候结束创建将代码注释的地方p2改成p1就没事了。我想知道的是

一个链表的小问题
代码是创建一个链表,输入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之后就没事了


[解决办法]
引用:
Quote: 引用:


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)
    {

如果不给它赋 NULL,想象一下,你输入的时候,上来就输 0 ,会发生什么
[解决办法]
引用:
Quote: 引用:


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指向哪里?这就造成了野指针。

热点排行