C中使用链表的队列只将最后一个节点作为一个整体无限队列

Queues Using Linked List in C only take last node as a whole infinite queue

我正在做一个数据结构项目。我被要求从名为“ToServe.txt”的文件中获取信息。文件中的数据格式为:

TicketNumberSpaceStudentIDSpaceStudentName
TicketNumberSpaceStudentIDSpaceStudentName

然而,实现下面的两个功能,我只能无限次地得到队列中的最后一个学生

int Start(advisee** front, advisee** rear) {
  advisee* student, *walker;
  FILE* infp;
  student = (advisee*)malloc(sizeof(advisee));
  infp = fopen("ToServe.txt", "r");
  if(infp == NULL) {
    return 0;
  }
  while(!feof(infp)) {
    fscanf(infp, "%d", &student->ticket);
    fscanf(infp, "%d", &student->ID);
    fgets(student->name, 100, infp);
    student->next = NULL;
    enqueue(front, rear, student);
  }
  walker = *front;
  fclose(infp);
  return 1;
}
void enqueue(advisee** front, advisee** rear, advisee* ToAdd) {
    if (*front == NULL)
      *front = ToAdd;
    else
      (*rear)->next = ToAdd;
    *rear = ToAdd;
}

只分配了一项:

advisee* student = (advisee*)malloc(sizeof(advisee));

...并且循环只是不断改变那个单一的被建议者,并重复将 same 指针添加到队列中。所以队列最终指向一个被建议者。

解决方案是将分配移动到循环内。