永发信息网

这个链表程序出现段错误,是什么原因,如何解决?

答案:1  悬赏:60  手机版
解决时间 2021-01-20 19:04
这个链表程序出现段错误,是什么原因,如何解决?
最佳答案
//代码段1:
#include
#include

typedef struct student
{
    int no;
    struct student *next;
}student;

int main()
{
    student *head=NULL,*p1=NULL,*p2=NULL,*p=NULL;
    int oneItem;

    printf("Input No:");
    scanf("%d",&oneItem);
    if(oneItem==0) //先检查输入的号码是否为0
    {
       printf("
没有学生数据.
");
       return 0;
    }
    //确认了输入号码不为0,再分配动态内存,保存数据
    p1=(student *)malloc(sizeof(student));
    if(p1==NULL)
    {
        printf("
分配动态内存出错.
");
        return 0;
    }
    p1->no=oneItem;
    p1->next=NULL;  //必须让p1->next等于NULL
    head=p1;        //head指向第1个节点
    p2=p1;          //p2指向当前节点,p1是新节点
    while(1)
    {
        printf("Input No:");
        scanf("%d",&oneItem);
        if(oneItem==0) //先检查输入的号码是否为0
        {
            break;
        }
        //确认了输入号码不为0,再分配动态内存,保存数据
        p1=(student *)malloc(sizeof(student));
        if(p1==NULL)
        {
            printf("
分配动态内存出错.
");
            return 0;
        }
        p1->no=oneItem;
        p1->next=NULL;

        p2->next=p1;  //将新节点p1加在p2的末尾
        p2=p1;        //p2指向当前节点
    }
    p=head;
    while(p) //语句while(p)就是相当于while(p!=NULL)
    {
        printf("%d
",p->no);
        p=p->next;
    }
    return 0;
}
//代码段2的问题:
    ......
    while(p1->no)
    {
        n++;
        if(head==NULL)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=(student *)malloc(sizeof(student));
        //新节点p1->next没有设定为NULL
        printf("Input Student's No.:");
        scanf("%d",&p1->no);
        //假设链表已经有2个学生数据,此时n=2,
        //p1提前分配了内存,然后,屏幕输入数字0,此时p1->no等于0,
        //n仍然是2个数据,但是,实际有3个数据,最后的数据是0,
        //退出了while(p1->no)循环之后,while(n)循环只显示2个数据,
        //最后那个节点p1成为了"游离"的数据,没有加入链表里.
    }
    ......
    while(n)
    {
        printf("
%d",p->no);
        p=p->next;
        n--;
    }
    ......追问忘了说一下,我是在linux环境下的c。
代码段2是没有问题的,我只想知道代码段1跟代码段2的区别是什么?以及代码段1为什么会出现错误,该如何解决,谢谢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
揭阳潮汕机场 到西安咸阳机场航班时刻表
有什么有什么方法改善听力
农村 种植什么最赚钱 北方
PA6-GF20M10和PA6-GM30是一样的吗
mate9可以用什么耳机
明天我生日,母亲的受难日!我应该送什么礼物
星艺幼儿园在哪里啊,我有事要去这个地方
珠海紫色的公交卡有什么用?
始兴县鸿运车行地址在哪,我要去那里办事
3D孔明锁 安卓的!23和24,25最后3关怎么过?
养心通脉方专利号是多少
F15战斗机为什么没有上航空母舰
风清月()
做木板为什么要用甲醛
英语英标中[ɔ] 是什么?
推荐资讯
564除以7的竖式怎么列?
为什么到了35还可以长高5厘米
赢了一局就不敢玩游戏是什么心态 知乎
女孩已经结婚一个月了,结婚时女方一个人没来
带有描写SM片段的言情小说
+1(917)633-0341是哪的电话
泰安黄前去济南彩石镇怎么走自驾
玩游戏对我们利大还是弊大辩论会,我是利大,
单选题下列我国古代设置的官职或制定的制度,
java String 中 intern方法的概念
双重图片其中一张是模糊的是用的什么p图软件
现在速求一篇3000字的入团申请书,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?