yanshaoshuai
天涯屐痕
采纳率100%
2016-11-30 14:12

单链表内存不可读是怎么回事?

5
  • c
  • 单链表
  • 内存读取
已采纳

下面这是出错的程序:
void selectnum(stu *head)
{ int num,j;
stu *p=head;
printf("输入要查询的学号\n");
scanf("%d",&num);
while(p->num!=num)
{p=p->next;
if (p=NULL) {printf("未查询到该学生\n");return;}
}
printf("信息如下:\n");
printf("学号\t 姓名\t电话\t\t邮箱\t 地址\t生日(年 月 日) \n");
printf("%d %s %s %s %s %d %d %d\n",p->num,p->name,p->call,p->email,p->address,p->b.year,p->b.month,p->b.day);
printf("输入:1继续.\n2结束.\n");
scanf("%d",&j);
if(j==1)
return;
else
baymanu();
}
输入学生信息创建链表后,查询第一个学生是没问题的,但是如果查询后面的学生就会报错,提示内存为不可读,新手不才,一直找不到错误所在,望各路大神赐教

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 5年前

    if (p=NULL)
    ->
    if (p==NULL)

    点赞 2 评论 复制链接分享
  • chr1341901410 狼无雨雪 5年前

    void selectnum(stu *head)
    { int num,j;
    stu *p=head;
    printf("输入要查询的学号\n");
    scanf("%d",&num);
    while(p->num!=num)
    {p=p->next;
    if (p==NULL) {printf("未查询到该学生\n");return;}//改了这边
    }
    printf("信息如下:\n");
    printf("学号\t 姓名\t电话\t\t邮箱\t 地址\t生日(年 月 日) \n");
    printf("%d %s %s %s %s %d %d %d\n",p->num,p->name,p->call,p->email,p->address,p->b.year,p->b.month,p->b.day);
    printf("输入:1继续.\n2结束.\n");
    scanf("%d",&j);
    if(j==1)
    selectnum(head);//这边改了下
    else
    return;//这边应该是return
    }

    点赞 评论 复制链接分享
  • qq_32648921 大风起兮呵呵呵 5年前

    你这个函数是放在一个循环里面循环调用的吗?你把那个循环函数能拿出来吗?光这个应该是没有问题。如果提示内存无法访问,应该是指针越界了

    点赞 评论 复制链接分享

为你推荐