无法用数字填充列表
问题描述:
我已经编写了一个程序来制作一个列表并将数字放入其中,但是在将两个数字放入它后,我得到一个错误。谁能告诉我为什么我得到那个错误?有没有简单的方法来处理列表?无法用数字填充列表
#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);
}
}
答
好像问题是creer_cellule()
不返回分配的对象,从而在主你与无效指针工作。
答
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
}
另外,在主加载环路()将反复添加相同的细胞除非面对面= creer_cellule()线在循环内移动。
// tete = creer_cellule();
for (i = 1; i < n; i++)
{
tete = creer_cellule(); // from above
inserer_queue(tete);
affiche_liste(tete);
}
为了完整,)的主要结束(应该通过增加细胞和自由他们的记忆列表。
附录: 在C标准库中没有简单的链接列表管理器。在C++中,你可以使用std :: list。
也许C标签更合适? – juanchopanza
你看到什么错误? – Dannnno