我正在实现结构的链接列表,但是我在子例程调用中遇到了一个非常奇怪的错误。我有两个结构,一个学生和一个请求如下:
9 struct request{
10 char class_name[24];
11 struct request * next_request;
12 };
13
14 struct student{
15 struct request * request_list;
16 int request_total;
17 struct student * next_student;
18 char name[24];
19 };
我正在使用子程序调用来添加到学生的request_list
104 void add_request(struct student * student, char* class_name){
105 student->request_total = student->request_total+1;
106 printf("%s before\n", student->name);
107 fflush(stdout);
108
109 struct request * new_req = malloc(sizeof(struct request));
110
110 printf("%s after\n", student->name);
110 fflush(stdout);
111 // other stuff ...
但malloc调用正在更改学生结构名称字段,因为我得到以下输出:
Bob before
1 after
有谁知道可能导致这种情况的原因?
编辑: 我发现这是一个非常愚蠢的错误。 对于一个新学生,在特定条件下,我在子程序调用之前是malloc()大小的学生指针,而不是学生。我仍然不知道为什么错误只发生在那条线之后,这就是让我失望的原因。 感谢大家的帮助。
答案 0 :(得分:0)
您需要查看调用add_request()的位置以及传递给它的学生指针。最有可能的是,学生指向的内存未正确分配,或者在调用add_request之前无意中释放了内存。您确定要传递指向链接列表中正确元素的指针,而不是意外地将指针传递给之前丢弃的指针吗?
虽然它可能不会导致此问题,但由于您将类名和学生名称声明为数组,因此您可能还需要考虑您的某个学校名称或请求名称对于该阵列来说太长了。 / p>