Erreur dans une liste simple

sakjimh Messages postés 13 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 31 décembre 2007 - 10 oct. 2007 à 21:33
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010 - 13 oct. 2007 à 00:07
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

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
10 oct. 2007 à 22:53
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.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
10 oct. 2007 à 23:02
Un pointeur est codé sur 32 bits soit de 4 octets, d'où le sizeof(noeud*) = 4.

Shell
0
sakjimh Messages postés 13 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 31 décembre 2007
12 oct. 2007 à 16:20
non ca ne change rien
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
13 oct. 2007 à 00:07
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');
0
Rejoignez-nous