Erreur dans une liste simple

Signaler
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007
-
Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010
-
salut,
j'ai crée un programme qui saisie une liste et les affiche a l'execution
mais il m'affiche une erreur genre probleme d'allocation et je ne vois pas ou?
alors pouvez vous m'aider.
merci,
#include <stdio.h>
#include <malloc.h>
typedef struct liste
{
int val;
struct liste *suivant;
} noeud;
void inserer_liste(noeud *l,int v)
{
noeud *nouveau;
noeud *parcour;
nouveau=(noeud *)malloc(sizeof(noeud*));
nouveau->val=v;
nouveau->suivant=NULL;
if(l==NULL)
l=nouveau;
else
{
parcour=l;
while(parcour->suivant!=NULL)
parcour=parcour->suivant;
parcour->suivant=nouveau;
}
l=parcour;
}
void affiche(noeud *l)
{
noeud *parcour;
parcour=l;
while(l->suivant!=NULL)
{
parcour=parcour->suivant;
printf("%d",parcour->val);
}
}
void main()
{
int i;
noeud *maliste;
maliste=NULL;
for(i=0;i<6;i++)
inserer_liste(maliste,i);
affiche(maliste);
}

4 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
22
Si tu fais :
nouveau=(noeud *)malloc(sizeof(noeud*));
Il manquera 4 octets dans ton allocation.

sizeof(POINTEUR*) alloue 4 octets même si ça pointe sur 1000 octets.

sizeof(noeud) allouera bien 8 octets.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Un pointeur est codé sur 32 bits soit de 4 octets, d'où le sizeof(noeud*) = 4.

Shell
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007

non ca ne change rien
Messages postés
202
Date d'inscription
dimanche 18 mai 2003
Statut
Membre
Dernière intervention
6 mars 2010

dans ton main ma liste vaut toujours NULL même apres les inserts car tu passe ton pointeur par copie.

plusieur solution possible :

void inserer_liste(noeud** l,int v)
void inserer_liste(noeud*& l,int v)
noeud* inserer_liste(noeud* l,int v)

et pense bien a faire un sizeof(noeud)


Voili,Voilou javascript:Insert_Emoticon('/imgs2/smile_wink.gif');