我在做作业时遇到了麻烦。我正在准备一个关于链表的小项目。 我写了一个程序,它向我显示有关分段错误的错误消息。我不知道,这东西是什么意思,我该怎么办。 我期待收到你们的一些解决方案 这是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Data{
int numero;
char *prenom;
float taille;
}donnees;
typedef struct list linked_list;
struct list{
donnees *data;
linked_list *next;
};
int main(){
int taille,i;
linked_list *tete,*ptr,*tete1;
tete=ptr=NULL;
printf("nentrer le nombre des etudiants a introduire dans la liste : ");
scanf("%d",&taille);
for(i=0;i<taille;i++){
ptr=(linked_list*)malloc(sizeof(linked_list));
printf("nentrer le numero de l'etudiant :");
scanf("%d",&(ptr->data->numero));
printf("nentrer le nom de l'etudiant :");
scanf("%s",(ptr->data->prenom));
printf("nentrer le numero de l'etudiant :");
scanf("%f",&ptr->data->taille);
ptr->next=NULL;
if(tete==NULL)tete=ptr;
else{
ptr->next=tete;
tete=ptr;
}
printf("votre liste s'ecrit sous la forme :n[tete]->");
ptr=tete;
while(ptr!=NULL){
printf("[ %d - %s -%f ]->",ptr->data->numero,ptr->data->prenom,ptr- >data->taille);
}
printf("NULLn");
}
return 0;
}
我不懂语言(用于变量命名和打印语句),但似乎
scanf("%d",&(ptr->data->numero));
是问题所在。在取消引用之前,您需要将内存分配给ptr->data
。
解释一下,data
也是一个指针。在使用之前,您需要为其分配内存 [malloc()
],就像您为ptr
所做的那样。
同样的情况适用于
scanf("%s",(ptr->data->prenom));
在这里,您需要在使用前同时分配data
和prenom
。
另外,请不要在C
中强制转换malloc()
和家人的返回值。
scanf("%d",&(ptr->data->numero));
您从未为data
分配内存。
scanf("%s",(ptr->data->prenom));
您从未为prenom
分配内存。
像对ptr
一样使用malloc
为这些对象分配内存。