Я запустил этот код на кодовых блоках, и он дает мне правильный вывод, но затем говорит, что link.exe перестал работать. Я не могу понять, почему, хотя код работает нормально. Я попытался исправить все проблемы в нем, потому что сначала он вообще не работал, теперь он работает и выдает результат, и происходит эта странная вещь. Как видно из кода, это простое задание, в котором я определяю структуру имени и возраста ученика, затем сканирует количество учеников, затем сканирует возраст и имя каждого ученика, создавая структуру для каждого, выделяя пространство в памяти и связывая все затем структуры распечатывают список и освобождают память.
[1]: https://i.stack.imgur.com/kuG14.png
#include <stdio.h>
#include <stdlib.h>
struct student {
char name[50];
int age;
struct student* next;
};
struct student * createStudent(char[] ,int);
void createString (struct student *,char []);
struct student * append (struct student *,struct student *);
void print(struct student *);
void freeS(struct student *);
int main (void){
int n,stage;
char stname[50];
struct student * start,*end ,*newp;
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%s %d",stname,&stage);
newp=createStudent(stname,stage);
if (i==0) {
start=newp;
end=newp;
} else {
end = append(end,newp);
}
}
print(start);
freeS(start);
}
struct student * createStudent(char n[] ,int x){
struct student *ptr;
ptr = (struct student*)malloc(sizeof(struct student));
ptr->age=x;
ptr->next= NULL;
createString(ptr,n);
return (ptr);
};
void createString(struct student* point,char name[]){
for(int i=0;i<50;i++){
point->name[i]=name[i];}
}
struct student * append(struct student * end, struct student * newp){
end->next=newp;
return(newp);
};
void freeS(struct student* start){
struct student * tmp;
tmp=start;
while (start!=NULL){
start=tmp;
free(start);
tmp=tmp->next;
}
}
void print(struct student* start){
int i = 1;
while (start!=NULL){
printf("The Student num%d's name is:%s\n Age is:%d \n",i,start->name,start->age);
start=start->next;
i++;
}
}