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
那样为这些对象分配内存。很好,我不懂语言。你懂自己的代码吗?快速一看,您的指针似乎不正确。请缩进您的代码。:-)我也不理解这种格式的代码。