C语言中的内存分割

C语言中的内存分割,c,pointers,struct,linked-list,segmentation-fault,C,Pointers,Struct,Linked List,Segmentation Fault,我在做作业时遇到了麻烦。我正在准备一个关于链表的小项目。 我写了一个程序,向我显示一条关于分段错误的错误信息。我不知道,这是什么意思,我该怎么办。 我期待着收到你们的一些解决方案 这是密码 ‪#‎include‬ <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Data{ int numero; char *prenom; float taille; }donnees; type

我在做作业时遇到了麻烦。我正在准备一个关于链表的小项目。 我写了一个程序,向我显示一条关于分段错误的错误信息。我不知道,这是什么意思,我该怎么办。 我期待着收到你们的一些解决方案 这是密码

‪#‎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("NULL\n");
}
return 0;
}
‪#‎包括‬ 
#包括
#包括
typedef结构数据{
整数;
char*prenom;
浮尾;
}唐尼;
类型定义结构列表链接列表;
结构列表{
donnees*数据;
链接列表*下一步;
};
int main(){
内特泰勒,我;
链表*tete,*ptr,*TETETE1;
tete=ptr=NULL;
printf(“\n以听众的名字作为开场白:”;
scanf(“%d”和“taille”);
对于(i=0;idata->numero));
printf(“\n学生姓名:”);
scanf(“%s”,(ptr->data->prenom));
printf(“\n学生人数:”;
扫描(“%f”和&ptr->data->taille);
ptr->next=NULL;
如果(tete==NULL)tete=ptr;
否则{
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(“NULL\n”);
}
返回0;
}
我不懂这种语言(用于变量命名和打印语句),但似乎

 scanf("%d",&(ptr->data->numero));
这就是问题所在。在取消引用之前,您需要将内存分配给
ptr->data

解释一下,
数据
也是一个指针。在使用它之前,您需要将内存[
malloc()
]分配给它,就像您对
ptr
所做的那样

同样的情况也适用于

scanf("%s",(ptr->data->prenom));
在这里,您需要在使用前分配
数据
prenom

另外,请在
C
中输入
malloc()
和family的返回值

scanf("%d",&(ptr->data->numero));
您从未为
数据
分配内存

scanf("%s",(ptr->data->prenom)); 
您从未为
prenom
分配内存


使用
malloc
就像对
ptr
那样为这些对象分配内存。

很好,我不懂语言。你懂自己的代码吗?快速一看,您的指针似乎不正确。请缩进您的代码。:-)我也不理解这种格式的代码。