无法用数字填充列表

问题描述:

我已经编写了一个程序来制作一个列表并将数字放入其中,但是在将两个数字放入它后,我得到一个错误。谁能告诉我为什么我得到那个错误?有没有简单的方法来处理列表?无法用数字填充列表

#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); 
    } 
} 
+1

也许C标签更合适? – juanchopanza

+0

你看到什么错误? – Dannnno

好像问题是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。