Help,Incident de segmentation, SVP de l'aide

Résolu/Fermé
dachitaib Messages postés 4 Date d'inscription lundi 19 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 - 19 nov. 2012 à 10:53
dachitaib Messages postés 4 Date d'inscription lundi 19 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012 - 19 nov. 2012 à 16:37
Bonjour tout le monde,

Dans le cadre d'un projet en C, j'ai vraiment du mal à finir ma première séance qui consiste à créer des fonctions manipulant les listes chainées, j'ai fait plusieur compilation j'ai réglé les erreurs de compilation, mais là, quand j'execute mon programme on m'indique une erreur de segmentation, vous trouverez les differents codes des differents fichiers constituant mon projet, Et merci de bien vouloir me répondre pour m'aider .

"list.c"

#include <stdlib.h>
#include <stdio.h>
#include "list.h"

list *creation_list()
{
list* l = NULL;
return l;
}


void insertion_tete(list* l, void* valeur)
{
	list *p=(list*)malloc(sizeof(list));
	p->val=valeur;
	p->suivant=l->suivant;
	l->suivant=p;
}




"list.h"

typedef struct element {
struct element *suivant;
void *val;
}list;

extern list *creation_list();
extern void insertion_tete(list *l,void* val);





"testlist.c"


#include <stdlib.h>
#include <stdio.h>
#include "list.h"


int main()
{
	
	list *deb=creation_list();
	int *i=(int*)malloc(sizeof(int));
	int *j=(int*)malloc(sizeof(int));
	int *k=(int*)malloc(sizeof(int));
	*i=3;
	*j=7;
	*k=19;
	printf("Bonjour1");
	insertion_tete(deb,i);
	insertion_tete(deb,j);
	insertion_tete(deb,k);
	while(deb!=NULL)
	{
		printf("%d /t", (*(int*)deb->val));
	}
	free(i);
	free(j);
	free(k);
	printf("Bonjour");
	return 0;
}




3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
19 nov. 2012 à 11:50
Salut.
Tu ne prends pas en compte le premier argument.
Tu commences avec l==0 et dans insertion_tete, tu fais directement l->suivant. Comme l est NULL ça fait une erreur.

D'ailleurs, creation_list ne sert à rien, car retourne NULL, donc autant mettre NULL plutôt que d'appeler une fonction.

Dans insertion_tete, tu fait une erreur. Comme tu mets au début, c'est p->suivant=l; qu'il faut mettre puis l=p pour définir la nouvelle tête.
0
dachitaib Messages postés 4 Date d'inscription lundi 19 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012
19 nov. 2012 à 13:16
Ah Oui çà je l'ai bien compris, merci pour ta réponse, Sinon y'a quelque chose pour le"while" que j'ai mis pour l'affichage, je ne sais pas ce qui se passe ... Merci encore pour ta réponse
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
19 nov. 2012 à 14:13
C'est quoi le problème du while ? Mis à part qu'il manque une incrémentation quelque par.
0
dachitaib Messages postés 4 Date d'inscription lundi 19 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012
19 nov. 2012 à 16:37
Merci , j'ai trouvé l'erreur que j'avais commise , Voici le corrigé !
void insertion_tete (list ** l, void *valeur)
{
   list *p = (list *) malloc (sizeof (list));
   p->val = valeur;
   p->suivant = *l;
   *l = p;
}


Sans oublier qu'il faut faire des "
&
" dans le main et l'incrémentation dans le while ! Bref y'avait plein d'erreurs au niveau de l'execution.


Merci infiniment pour vos réponses, MERCI !
0