C 语言中的内存分割



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

‪#‎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));

在这里,您需要在使用前同时分配dataprenom

另外,请不要在C中强制转换malloc()和家人的返回值。

scanf("%d",&(ptr->data->numero));

您从未为data分配内存。

scanf("%s",(ptr->data->prenom)); 

您从未为prenom分配内存。

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

相关内容

  • 没有找到相关文章

最新更新