j'ai une liste chainée avec comme valeur une chaine de caractère.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
typedef struct Liste
 
{
 
     char *valeur;
 
     struct Liste *suivant;
 
} Liste ;
j'ai une fonction ajouter

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
 
void ajouter(Liste **sl, char* Val)
 
{
 
        Liste *tmp = NULL;
 
        Liste *csl = *sl;
 
        Liste *elem = (Liste*)malloc(sizeof(Liste));
 
        if(!elem) exit(EXIT_FAILURE);
	//strcpy(elem->valeur,Val);
 
        //elem->valeur=malloc(strlen(Val)*sizeof(char));
 
        //strcpy(elem->valeur,res);
 
	elem->valeur=Val;        
	elem->suivant=NULL;
 
        while(csl)
 
        {
 
             tmp = csl;
 
             csl = csl->suivant;
 
        }
 
 
 
        if(tmp) 
 
             tmp->suivant = elem;
 
 
 
        else {
 
             *sl = elem;
 
        }
 
}
le problème c'est que si j'alloue de la memeoire pour la chaine de caractère dans cette fonction je recoit une erreur de sementation.

et si j'enlève l'allocation il n'y a pas d'erreur mais le problème c'est que j'appelle la fonction ajouter plusieurs fois et si je garde l'affectation de la chaine de caractère je vais me retrouver avec tous les elements de liste pointé sur une meme chaine null.