IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

erreur de segmentation


Sujet :

C

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut erreur de segmentation
    bonjour à tous,
    j'ai fait un programme qui extrait les paires des mots voisins du texte et les sttocke dans une table de hachage.
    ya une erreur de segmentation dont j'arrive pas à voir la cause.
    cette erreur est dans la fonction : void insere_table(Liste **TableHash, char mot[500])
    et avec printf ("vvvvvv"); (je la met pour voir où le probleme). je vois que le programme s'arrete meme avavnt d'affiche "vvvvvv":
    quelqu'un peut m'aider à rectifier cette erreur fatale
    voila le code
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <stdlib.h>
    #define TAILLEHASH 307009
    #define BUFFSIZE 64
    #define FNAME "c:\\out.txt"
     
    typedef struct L
    {	int freq;
    	char mot[50];
     
    	struct L *suivant;
    } Liste;
     
     
     
    char* get_word(FILE *fdesc, char *buff, size_t size)
    {
    	char *ret=NULL;
     
    	if( fdesc!=NULL && buff!=NULL && size>0 )
    	{
    		int c;
    		int i=0;
    		while( ret==NULL && i<size && (c=fgetc(fdesc))!=EOF )
    		{
    			if( isalpha(c) )
    			{
    				buff[i]=c;
    				i++;
    			}
    			else if( i>0 )
    			{	/* mot */
    				buff[i]='\0';
    				ret=buff;
    			}
    		}
    	}
    	return ret;
    }
     
    void insere_table(Liste **TableHash,  char  mot[50]);
    unsigned int hash_cle(const char mot[50]);
     
     
    int main(void)
    {
    	FILE *fdesc=fopen(FNAME,"r");
    	Liste **TableHash;
     
    	if( fdesc )
    	{
    		char buff[BUFFSIZE];
            char prec[BUFFSIZE];
            char mot_res[BUFFSIZE*2];
     
     
     
     
    		if( get_word(fdesc,prec,BUFFSIZE) )
    		{
    			while( get_word(fdesc, buff, BUFFSIZE) )
    			{
    				//printf("%s %s\n",prec,buff);
    				sprintf(mot_res, "%s %s", buff, prec);
                    puts(mot_res);
     
     
     
     
     
    				insere_table(TableHash, mot_res);
    				strncpy( prec,buff,BUFFSIZE);
    			}
    		}
    		fclose(fdesc);
    	}
     
    	return 0;
    }
     
    void insere_table(Liste **TableHash,  char  mot[500])
    {
    	/* calcule le hash du mot */
    	unsigned int idx = hash_cle(mot);
    printf("%d", idx);
     
     
    	/* recherche du mot */
     
    	Liste *p = TableHash[idx];
    	printf("vvvtevvvvvvvvv");
    	while(p != NULL)
    	{
    	    printf("aaa");
    		if(strcmp(p->mot, mot) == 0)
    		{
    			/* le mot est trouve */
    			break;
    		}
    		p =p->suivant;
    	}
     
    	if(p == NULL)
    	{
    		/* le mot n'existe pas, insertion de celui ci */
    		p = (Liste *)malloc(sizeof(Liste));
    		if(p == NULL)
    		{
    			/* erreur d'allocation de memoire */
    			printf("Erreur d'allocation mémoire\n");
    			exit(0);
    		}
     
    		/* initialisation de la structure */
     
    		p->freq = 1;
    		strncpy(p->mot, mot, sizeof(p->mot));
     
     
     
    		/* mise a jour des liens, insertion en debut de liste */
    		p->suivant = TableHash[idx];
    		TableHash[idx] = p;
     
    		return;
    	}
     
    	/* le mot existe */
    	/* ajout des coordonnees */
     
    }
     
    unsigned int hash_cle(const char mot[500])
    {
    	unsigned int val = 0;
    	for(; *mot != '\0'; ++mot)
    	{
    		val = *mot + 31 * val;
    	}
    	return val % TAILLEHASH;
    }

    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Le pointeur TableHash est utilisé sans être initialisé.

  3. #3
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    bonjour à tous ,
    j'ai un probleme dans ma fonction "GenererNseq" c'est qu'il ya une erreur de segmentation
    j'ai une liste chainéé seq 2 et une autre autre liste seq2, je fais le parcours de ces 2 liste et voir si le dernier mot de seq==au 1er mot de seq, si c'est le cas , je concatene les 2 mots et le stocke dans une nouvelle liste chainée
    merci de m'aider
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    void GenererNseq(Liste **seq, Liste **seq2)
    {
        char *der;
        char *pre;
        char *buff;
        Liste *ss;
        Liste *p;
        Liste *q;
        char *mot;
        mot=p->mot;
        der =NULL;
        der = malloc(100*sizeof(*der));
     
     
     
     
     
     
        for(p=*seq; p!=NULL; p=p->suivant)
        {
            der=GetLastWord(buff,mot);
     
                printf("%s", der);
     
        }
        free(der);
     
     
    }
     
     
     
     
     
    char* GetFirstWord(char* sentence, char* buffer)
    {
      char* pch;
     
      strcpy(buffer, sentence);
     
      pch = strtok(buffer," ,.-");
      if (pch == NULL)
      {
        buffer[0] = 0;
        pch = buffer;
      }
      return pch;
    }
     
    char* GetLastWord(char* sentence, char* buffer)
    {
      char* res;
      char* pch;
     
      strcpy(buffer, sentence);
     
      res = NULL;
      pch = strtok(buffer," ,.-");
      while (pch != NULL)
      {
        res = pch;
        pch = strtok (NULL, " ,.-");
      }
     
      if (res == NULL)
      {
        buffer[0] = 0;
        res = buffer;
      }
      return res;
    }
     
    }

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Liste *p;
        Liste *q;
        char *mot;
        mot=p->mot;
    p n'est pas initialisé.

    Mais ça va encore planté plus loin
    Puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     der=GetLastWord(buff,mot);
    Et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* GetLastWord(char* sentence, char* buffer)
    {
      char* res;
      char* pch;
     
      strcpy(buffer, sentence);
    Ici, sentence est invalide.

    En plus, j'ai l'impression que t'a inversé les deux paramètres entre l'appel et l'implémentation.

  5. #5
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci beaucoup 3Darchi, mais comment je peux initialiste p et buff?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Je te l'avais bien dit, ta façon de créer une liste chaînée génère trop de confusion...

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    J'ai l'impression que:
    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
     
    #define C_TAILLE_MAX_PHRASE 100
    void GenererNseq(Liste **seq, Liste **seq2)
    {
        char *buff;
        char *der;
        Liste *p;
        char *mot; 
        buff = malloc(C_TAILLE_MAX_PHRASE*sizeof(*buff));
        for(p=*seq; p!=NULL; p=p->suivant)
        {
            mot=p->mot;
            der=GetLastWord(buff,mot); 
        }
        free(buff);
    }
    Puis dans GetLastWord: strncpy(buffer, sentence,C_TAILLE_MAX_PHRASE);
    Éventuellement: gérer avec erreur le cas où strlen(sentence)>C_TAILLE_MAX_PHRASE. Ou utiliser une allocation dynamique de buffer en fonction de la taille de mot, etc...

  8. #8
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    compliqué

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par cyrine Voir le message
    compliqué
    ?Quoi?

  10. #10
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    ?Quoi?
    merci 3DArchi,
    mais l'idée de base c'est que j'ai une liste chainée seq2 et une autre seq , je vais parcourir les 2 tout en faisant la comparaison pour chaque element de la liste si le dernier mot =au 1er .
    si c'est le cas je vais creer un nouvelle liste qui va contenir la concatenation des 2 mots (des 2 liste).
    je vois que c'est compliqué non?

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bon courage!
    N'oublies pas de passer à résolu lorsque ta question initiale l'est. Puis, d'autres questions viendront sûrement avec ton avancement

  12. #12
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    merci 3DArchi

  13. #13
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    j'ai une fonction à developper qui parcours 2 liste chainées et verifier pour chaque element de la liste si le dernier mot du l'element de la 1ere liste == premier mot de l'element de la 2emem liste,
    si c'est le cas on creer une nouvelle liste chainee resultante qui va contenir le mot concténé des 2 mots, enfin bref comme ca semble un peu complique c'est pour ca comme je suis debutante j'ai decidé de decortiquer cette fonction,
    j'ai fait une focntion qui parcours les 2 listes et qui compare les mots (premier avec derneir )
    si sont egaux j'affiche un message (" similaires!!!")
    c'est pour ca j'aime vous montere le code, je sais pas peut etre il contient des conneries des debutants
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    typedef struct L
    {
    	int freq;
    	char mot[50];
     
    	struct L *suivant;
    } Liste;
     
     
    Liste * GenNseq(Liste **seq2, Liste **seq)
    {
    Liste *p;
    Liste *q;
    char * mot;
    char * mot1;
    buff =malloc(100*sizeof(*buff));
     for(p=*seq2; p!=NULL; p=p->suivant)
      {
       mot=p->mot;
       first=Getfirstword(mot, buff);
       for(q=*seq; q!=NULL; q=q-<suivant)
        {
          mot1 =q->mot;
          last=Getlastword(mot1, buff);
           if(strcmp(first, last)==0)
            { printf("similaires!!!!");
             }
    }
    }
    }
     
    voila les 2 fonctions magiques  :p 
    char* GetFirstWord(char* sentence, char* buffer)
    {
      char* pch;
     
      strcpy(buffer, sentence);
     
      pch = strtok(buffer," ,.-");
      if (pch == NULL)
      {
        buffer[0] = 0;
        pch = buffer;
      }
      return pch;
    }
     
    char* GetLastWord(char* buffer, char* sentence)
    {
      char* res;
      char* pch;
     
      strcpy(buffer, sentence);
     
      res = NULL;
      pch = strtok(buffer," ,.-");
      while (pch != NULL)
      {
        res = pch;
        pch = strtok (NULL, " ,.-");
      }
     
      if (res == NULL)
      {
        buffer[0] = 0;
        res = buffer;
      }
      return res;
    }
    ça plante
    merci

  14. #14
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je te l'avais bien dit, ta façon de créer une liste chaînée génère trop de confusion...
    Oui médinoc, mais reste plus de temps pour tout refaire, sachant que j'ai refais le meme travail(boulot depuis le debut de l'été)

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Commentaires dedans
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    /* permettra d'utiliser partout la meme valeur:*/
    #define C_TAILLE_MOT 50
    typedef struct L
    {
    	int freq;
    	char mot[C_TAILLE_MOT];
     
    	struct L *suivant;
    } Liste;
     
    /* Prototypes des fonctions pour que ce soit plus clair */
    /* Assymetrie dans les arguments pour montrer que le premier,
    est const et on y touche pas alors que le second est le buffer temporaire
    */
    char* GetFirstWord(const char* sentence, char* buffer);
    char* GetLastWord(const char* sentence, char* buffer);
     
    Liste * GenNseq(Liste *seq2, Liste *seq);
     
    Liste * GenNseq(Liste *seq2, Liste *seq)
    {
       Liste *p;
       Liste *q;
       char * mot;
       char * mot1;
       char *first;
       char *last;
       char buff1[C_TAILLE_MOT];/* pas besoin de malloc car 50 est une petite taille et ca s'ajuste avec Liste::mot */
       char buff2[C_TAILLE_MOT];/* deux buffer temporaire: un pour chaque liste!*/
       Liste *pNouvelleListe;/* pour creer la liste*/
       Liste *pCourant;
     
       pNouvelleListe=NULL;
       for(p=seq2; p!=NULL; p=p->suivant)
       {
          mot=p->mot;
          if(mot){
             first=GetFirstWord(mot, buff1);
             for(q=seq; q!=NULL; q=q->suivant)
             {
                mot1 =q->mot;
                if(mot1){
                   last=GetLastWord(mot1, buff2);
                   if(strncmp(first, last,C_TAILLE_MOT)==0)
                   { 
                      printf("similaires!!!!");
                      pCourant = malloc(sizeof(Liste));
                      pCourant->freq = 1;
                      strncpy(pCourant->mot,first,C_TAILLE_MOT);
                      pCourant->suivant = pNouvelleListe;
                      pNouvelleListe = pCourant;
                   }
                }
             }
          }
       }
     
       return pNouvelleListe;
    }
     
    char* GetFirstWord(const char* sentence, char* buffer)
    {
      char* pch;
     
      strncpy(buffer, sentence,C_TAILLE_MOT);
     
      pch = strtok(buffer," ,.-");
      /* si (pch==NULL) ca veut dire que le premier mot est le total de sentence */
      return buffer;
    }
     
    char* GetLastWord(const char* sentence, char* buffer)
    {
      char* res;
      char* pch;
     
      strncpy(buffer, sentence,C_TAILLE_MOT);
     
      res = NULL;
      pch = strtok(buffer," ,.-");
      while (pch != NULL)
      {
        res = pch;
        pch = strtok (NULL, " ,.-");
      }
     
      if (res == NULL)
      {/* C'est qu'on n'est pas rentre dans la boucle while -> donc le premier mot = l'ensemble de sentence */
        res = buffer;
      }
      return res;
    }

  16. #16
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Merci 3DArchi,

  17. #17
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Penses à

  18. #18
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    il se plante, en plus une erreur de segmentation
    mot=p->mot;
    ya un probleme à ce niveau car qund je fais juste à la suite un printf, il affiche des caracteres bizarres!!
    strcpy(buffer, sentence); ici aussi dans la fonction "GetFirstWord" , il m'affiche erreur de segmentation
    j'attends vos aides svp
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo