无法用数字填写列表

时间:2015-04-22 21:48:16

标签: c++

我已经编写了一个程序来制作一个列表并将数字放入其中,但是在我输入两个数字之后我得到了一个错误。谁能告诉我为什么我会收到这个错误?是否有简单的方法来处理列表?

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

2 个答案:

答案 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。