Help,Incident de segmentation, SVP de l'aide

Résolu
dachitaib Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
dachitaib Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention  
 
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