C:在结构中添加链表导致空错误
C: Adding linked list inside struct results in null error
我在尝试使用函数在结构中添加链表时遇到了问题。编译器说我使用的是 NULL 指针。我不确定到底是什么原因造成的,感谢任何帮助,谢谢!
我有 2 个结构:struct student 和 struct school
构造学生:
struct student{
char student_name[STR_MAX];
double grade;
struct student *next;
};
建校
struct school {
struct student *students;
}
有问题的函数
我正在尝试将学生的链接列表添加到学校,这有点像结构中的链接列表。我不确定为什么它不起作用。编译器说我正在尝试通过空指针访问一个字段,我已经在它所在的位置添加了注释。
int add_student(
struct school *school
char student_name *student_name,
double grade,
) {
struct student *new_student = malloc(sizeof(struct student));
new_student->grade = grade;
strcpy(new_student->student_name, student_name);
new_student->next = NULL;
struct student *current = school->students;
//Adding the first linked list
if (current == NULL) {
school->students= new_student;
}
//others
while (current->next != NULL) { //the compiler pointed here
current = current->next;
}
current->next = new_student;
new_student->next = NULL;
return 1;
}
此外,我还有另一个功能,我不确定是否对此有任何用处,它只是为学校分配内存。不知道有没有用。
struct school *new_school() {
struct school *new = malloc(sizeof(struct school));
new->students = NULL;
return new;
}
Paserby 指出了这个问题,但我也会把它放在这里。
在您的 if 语句中,如果没有学生
,您将学生链表的头部指向您的新学生
//Adding the first linked list
if (current == NULL) {
school->students= new_student;
}
不过你继续往下看。 Current 仍然是 null 因为它是创建时存储在 school->students 中的值的副本
//others
while (current->next != NULL) { //the compiler pointed here
current = current->next;
}
将 while 循环放在 else 语句中或在 if 语句中重新分配 current
我在尝试使用函数在结构中添加链表时遇到了问题。编译器说我使用的是 NULL 指针。我不确定到底是什么原因造成的,感谢任何帮助,谢谢!
我有 2 个结构:struct student 和 struct school
构造学生:
struct student{
char student_name[STR_MAX];
double grade;
struct student *next;
};
建校
struct school {
struct student *students;
}
有问题的函数
我正在尝试将学生的链接列表添加到学校,这有点像结构中的链接列表。我不确定为什么它不起作用。编译器说我正在尝试通过空指针访问一个字段,我已经在它所在的位置添加了注释。
int add_student(
struct school *school
char student_name *student_name,
double grade,
) {
struct student *new_student = malloc(sizeof(struct student));
new_student->grade = grade;
strcpy(new_student->student_name, student_name);
new_student->next = NULL;
struct student *current = school->students;
//Adding the first linked list
if (current == NULL) {
school->students= new_student;
}
//others
while (current->next != NULL) { //the compiler pointed here
current = current->next;
}
current->next = new_student;
new_student->next = NULL;
return 1;
}
此外,我还有另一个功能,我不确定是否对此有任何用处,它只是为学校分配内存。不知道有没有用。
struct school *new_school() {
struct school *new = malloc(sizeof(struct school));
new->students = NULL;
return new;
}
Paserby 指出了这个问题,但我也会把它放在这里。 在您的 if 语句中,如果没有学生
,您将学生链表的头部指向您的新学生//Adding the first linked list
if (current == NULL) {
school->students= new_student;
}
不过你继续往下看。 Current 仍然是 null 因为它是创建时存储在 school->students 中的值的副本
//others
while (current->next != NULL) { //the compiler pointed here
current = current->next;
}
将 while 循环放在 else 语句中或在 if 语句中重新分配 current