我已经编写了一个程序来制作一个列表并将数字放入其中,但是在我输入两个数字之后我得到了一个错误。谁能告诉我为什么我会收到这个错误?是否有简单的方法来处理列表?
#include <stdio.h>
#include <stdlib.h>
typedef struct element element;
struct element
{
int val;
struct element *suiv;
};
typedef element* liste;
element* creer_cellule()
{
element* nouv;
nouv=(element*)malloc(sizeof(element));
if (nouv==NULL)
{
printf("erreur memoire pleine");
exit(0);
}
else
{
nouv->suiv=NULL;
printf("donner un entier");
scanf("%d",&nouv->val);
}
}
void inserer_queue(element* t)
{
element*nouv,*p;
nouv=creer_cellule();
p=t;
while(p->suiv!=NULL)
{
p=p->suiv;
}
p->suiv=nouv;
}
void affiche_liste (element*t)
{
element* p;
p=t;
while(p!=NULL)
printf("%d",p->val);
}
void main(){
element* tete=NULL;
int i,n;
printf("donner le nombre d'etudiants");
scanf("%d",&n);
tete=creer_cellule();
for(i=1;i<n;i++){
inserer_queue(tete);
affiche_liste(tete);
}
}
答案 0 :(得分:0)
似乎问题是creer_cellule()
没有返回分配的对象,因此在main中你正在处理一个无效的指针。
答案 1 :(得分:0)
Amnon是正确的创建单元格函数中缺少return语句。
element* creer_cellule()
{
element* nouv;
nouv = (element*) malloc(sizeof(element));
if (nouv == NULL)
{
printf("erreur memoire pleine");
exit(0);
}
else
{
nouv->suiv = NULL;
printf("donner un entier");
scanf("%d", &nouv->val);
}
return nouv; // needed to return the created value
}
此外,main()中的add循环将重复添加相同的单元格,除非tete = creer_cellule()行在循环内移动。
// tete = creer_cellule();
for (i = 1; i < n; i++)
{
tete = creer_cellule(); // from above
inserer_queue(tete);
affiche_liste(tete);
}
为了完整性,main()的结尾应该遍历添加的单元格列表并释放它们的内存。
附录: 在C标准库中没有简单的链表管理器。在C ++中,您可以使用std :: list。