C语言链表哪里错了总是不知道再怎么改?

#include<stdio.h>
#include<stdlib.h>
struct student {
    int num;//数据域
    struct student *next;//指针域
};
struct student *crea(int n)
{
    struct student *head, *pa, *pb;
    int i;
    head = NULL;
    for (i = 0; i < n; i++)
    {
        pb = (struct student*)malloc(sizeof(struct student));
        if (pb == NULL)
        {
            printf("第%d个学生内存创建失败!", i + 1);
            break;
        }
    }
    printf("输入学号:");
    pb = head;
    scanf_s("%d", &pb->num);
    if (i == 0)
    {
        head = pb;
        pa = pb;
    }
    return head;
}
void  print(struct student *head)
{
    struct student *p = head;
    while(p != NULL)
    {
        printf("学号:%d", p->num);
        p = p->next;
    }
}
int main()
{
    struct student *head = crea(1);
    print(head);
    system("pause");
    return 0;
}

照片总是没办法上传不知道怎么回事
提示说使用了可能未初始化的本地指针变量pb

阅读 2.2k
1 个回答
  1. 把格式改好,segmentfault 使用 markdown 语法,代码可以使用 包括起来
  2. 请指出你是出了什么错。是编译不通过还是运行出了错:如果是编译出错,请将编译器提示的错误信息贴出来;如果是运行出错,请将你的输入(如果有)和期望输出贴出来
  3. 编译器提示你可能使用了未初始化的变量(这个编译器不错),是因为 for 循环可能不执行(比如 n = 0 的时候),下面 pb = head,因为 head 也没有初始化,所以下面 scanf 的时候也就使用了一个 未初始化的变量 pb
  4. 给你一个应该是正确的写法,和你的写法对比一下
struct student *crea(int n)
{

    struct student *head = NULL, *pa = NULL, *pb;
    int i;
    for (i = 0; i < n; i++)
    {
        pb = (struct student*)malloc(sizeof(struct student));
        if (pb == NULL)
        {
            printf("第%d个学生内存创建失败!", i + 1);
            return NULL;    // 想想为什么这样写
        }
        printf("输入学号:");
        scanf("%d", &pb->num);
        pb->next = NULL;
        if (head == NULL)
        {
            head = pb;
            pa = pb;
        }
        else
            pa->next = pb;
    }
    return head;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进