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 :

tableau de pointeurs


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut tableau de pointeurs
    Bonjour,
    dans le cadre d'un traitement temps réel j'ai besoin d'avoir la réponse à un problème simple :
    j'ai un tableau de données par ex ArrayA = { 1 , 10 , 2 , 11 , 3 , 12} (taille 6 en int)
    j'ai 2 tableaux : ArrayB et ArrayC (taille 3 en int)
    et je voudrais que mon tableau ArrayB aille pointer sur le tableau ArrayA pour récupérer les valeur {1,2,3} et que ArrayC aille pointer sur les valeur {10,11,12}

    j'aurais aimé faire un truc du genre au final
    ArraB[0] = &ArrayA[0];
    ArraB[1] = &ArrayA[2];
    ArraB[2] = &ArrayA[4];
    ArraC[0] = &ArrayA[1];
    ArraC[1] = &ArrayA[3];
    ArraC[2] = &ArrayA[5];

    De cette facon je construis 2 tableaux (ArrayB et ArrayC) juste en remplissant un tableau (ArrayA)
    le code que j'ai écris ne fonctionne pas, savez vous comme faire ca en c ?

    J'ai bien cherché mais Google ne sait pas

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Ce qui est étonnant c'est que tu sois obligé de faire quelque chose comme ça.

    Je ne sais pas quelles sont tes contraintes mais pourquoi ne pas utiliser un tableau et démarrer les indices à 0 et à 3 ?

    Tu aurais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int pos_tab_b = 0 ;
    int pos_tab_c = 3 ;
    Dans le cas où tu veux vraiment faire comme dans ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a[6] = {1,2,3,4,5,6};
    int* b = &n[0] ;
    int *c = &n[3];
    De toute évidence, tu ne peux pas limiter b à 3 cases, si tu fais b[4] ça marchera. Si tu veux éviter ça tu dois recopier le tableau dans un autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int a[6] = {1,2,3,4,5,6};
    int i;
    int b[3] ;
    for(i=0; i<3; ++i)
     b[i] = a[i] ;
    Mais réfléchis bien à ton objectif final.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 133
    Points
    133
    Par défaut
    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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
            //initialisation de arrayA pour l'exemple
            int* arrayA = malloc(6*sizeof(int));
            int i;
            for(i=0;i<6;i++){
                    arrayA[i]=i;
            }
            int** arrayB = malloc(3*sizeof(int*));
            int** arrayC = malloc(3*sizeof(int*));
            //La partie intéressante, on recopie les adresses dans les deux tableaux
            for(i=0;i<3;i++){
                    arrayB[i]=arrayA+i;
                    arrayC[i]=arrayA+(i+3);
            }
           //Affichage avec les premieres valeurs
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            //On modifie arrayA
    	arrayA[0]=3;
    	arrayA[4]=40;
            //Repercution sur B et C
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            return 0;
    }
    C'est sans doute pas très propre, mais ca fait ce que tu veux. On récupère les pointeurs des cases dans les tableau B et C.
    Note bien qu'il est impératif d'utiliser l'* lors de l'appel de arrayB/arrayC.
    De toute évidence, tu ne peux pas limiter b à 3 cases, si tu fais b[4] ça marchera. Si tu veux éviter ça tu dois recopier le tableau dans un autre :
    Il n'évitera rien du tout. Au mieux il se retrouvera avec un b[4] completement incohérent au lieu d'être un truc qui peut "sembler" juste. Mais il peut aussi bien se retrouver avec un truc qui "pourrait" coller. On en sait rien, on ne connait pas l'état de la mémoire autour.
    D'autre part, il ne faut pas recopier le tableau dans deux autres tableau pour son problème initial.
    Si tu modifies arrayA apres, il se passe quoi ? arrayB et arrayC sont tels qu'ils étaient quand t'as recopié arrayA, ca ne répond donc plus au probleme.

  4. #4
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Effectivement ça ne limite pas. Mais je voulais dire que il est sur que b[4] marchera avec la première technique tandis que avec la 2ème il pourra avoir une segfault. Mais ça ne répond plus à l'exercice, tu as tout à fait raison.

    Je pense que c'est quand même étrange d'être obligé de faire quelque chose comme ça...

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 133
    Points
    133
    Par défaut
    Je pense que c'est quand même étrange d'être obligé de faire quelque chose comme ça...
    Plus qu'étrange, c'est dangereux aussi.

    Tant que ton ensemble arrayB + arrayC reste plus petit que arrayA, et qu'il est inclus dans arrayA, y'a pas de soucis, tout tes éléments de arrayB/C seront des éléments connus.

    Mais que se passe-t il au moment ou tu vas faire un free de ton arrayA ? arrayB et arrayC vont pointer sur une zone non connue, ou il peut y avoir n'importe quoi.
    Je ne suis pas un pro de sécurité, mais il me semble que si une personne connait l'endroit ou pointe arrayB[X], sait que c'est une zone vide, et décide d'y mettre un code malicieux, ca peut plutot mal se passer

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Ce que tu as commencé à faire est correct, à supposer que tu a bien déclaré ArrayB et ArrayC comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *ArrayB[3];
    int *ArrayC[3];
    Et que tu y accèdes comme celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("%i %i %i\n", *ArrayB[0], *ArrayB[1], *ArrayB[2]);
    printf("%i %i %i\n", *ArrayC[0], *ArrayC[1], *ArrayC[2]);
    Je ne vois aucun problème avec ce code. Ce n'est pas particulièrement dangereux, comme toujours avec le C il faut faire attention à ce qu'on fait.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Qia,

    Bien essayé pour qu'on fasse tes exercices à ta place.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 91
    Points : 133
    Points
    133
    Par défaut
    Ce n'est pas particulièrement dangereux, comme toujours avec le C il faut faire attention à ce qu'on fait.
    Rien n'est vraiment dangereux quand on sait ce qu'on fait. Mais il faut quand même à mon avis redoubler de prudence quand on fait de la manipulation de pointeurs, et ca ne coute rien de le dire (surtout sur un forum "débutant")

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut j'ai ma réponse
    Merci à tous, parfait pour cette réponse c'est ce que j'attendais.
    Je savais pas que c'était possible.
    Je vous explique l'intérêt de cette méthode pour mon application.
    Je récupérer un buffer de données à partir d'un driver qui vient récupérer des signaux issues du FPGA (connecté sur un pci). Ce buffer représente 6 tableaux de nombres complexes. Sur ce grand buffer je dois réordonner les données sur 6 tableaux pour effectuer des FFT complexe.
    Grâce à l'utilisation de pointeur l'ordinateur n'effectue donc aucun calcul pour réordonner ces tableaux.
    Encore merci pour vos réponses rapide et merci à Al_th
    Grâce à ca je gagne qq micro seconde dans mon calcul

    Citation Envoyé par Al_th Voir le message
    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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
            //initialisation de arrayA pour l'exemple
            int* arrayA = malloc(6*sizeof(int));
            int i;
            for(i=0;i<6;i++){
                    arrayA[i]=i;
            }
            int** arrayB = malloc(3*sizeof(int*));
            int** arrayC = malloc(3*sizeof(int*));
            //La partie intéressante, on recopie les adresses dans les deux tableaux
            for(i=0;i<3;i++){
                    arrayB[i]=arrayA+i;
                    arrayC[i]=arrayA+(i+3);
            }
           //Affichage avec les premieres valeurs
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            //On modifie arrayA
    	arrayA[0]=3;
    	arrayA[4]=40;
            //Repercution sur B et C
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            return 0;
    }
    C'est sans doute pas très propre, mais ca fait ce que tu veux. On récupère les pointeurs des cases dans les tableau B et C.
    Note bien qu'il est impératif d'utiliser l'* lors de l'appel de arrayB/arrayC.

    Il n'évitera rien du tout. Au mieux il se retrouvera avec un b[4] completement incohérent au lieu d'être un truc qui peut "sembler" juste. Mais il peut aussi bien se retrouver avec un truc qui "pourrait" coller. On en sait rien, on ne connait pas l'état de la mémoire autour.
    D'autre part, il ne faut pas recopier le tableau dans deux autres tableau pour son problème initial.
    Si tu modifies arrayA apres, il se passe quoi ? arrayB et arrayC sont tels qu'ils étaient quand t'as recopié arrayA, ca ne répond donc plus au probleme.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mattox37 Voir le message
    Grâce à l'utilisation de pointeur l'ordinateur n'effectue donc aucun calcul pour réordonner ces tableaux.
    Grâce à ca je gagne qq micro seconde dans mon calcul
    Code c : 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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
            //initialisation de arrayA pour l'exemple
            int* arrayA = malloc(6*sizeof(int));
            int i;
            for(i=0;i<6;i++){
                    arrayA[i]=i;
            }
            int** arrayB = malloc(3*sizeof(int*));
            int** arrayC = malloc(3*sizeof(int*));
            //La partie intéressante, on recopie les adresses dans les deux tableaux
            for(i=0;i<3;i++){
                    arrayB[i]=arrayA+i;
                    arrayC[i]=arrayA+(i+3);
            }
           //Affichage avec les premieres valeurs
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
    Salut
    Effectivement, dans le code que tu nous présentes il n'y a aucun calcul pour réordonner le tableau mais c'est parce que le tableau "arrayA" est déjà trié vu que tu l'as rempli avec les entiers naturels !!!

    Alors que si tu prends ton tableau initial ArrayA = { 1 , 10 , 2 , 11 , 3 , 12}, que tu fasses une recopie des nombres ou que tu pointes les cases contenant leur adresse, tu es quand-même obligé de faire un algo pour les trier. Ou alors c'est que j'ai rien compris à cette phrase
    et je voudrais que mon tableau ArrayB aille pointer sur le tableau ArrayA pour récupérer les valeur {1,2,3} et que ArrayC aille pointer sur les valeur {10,11,12}
    Citation Envoyé par mattox37 Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            //On modifie arrayA
    	arrayA[0]=3;
    	arrayA[4]=40;
            //Repercution sur B et C
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            return 0;
    }
    Effectivement, le seul avantage que tu auras à passer par des pointeurs c'est qu'il n'y a au final qu'un seul tableau de valeurs. Et donc la modification du contenu du tableau est répercutée quand on l'affiche par les pointeurs...

    Accessoirement, dans ton exemple les malloc sont inutiles
    Code c : 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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
            int arrayA[6];
            int* arrayB[3];
            int* arrayC[3];
            int i;
     
            //initialisation de arrayA pour l'exemple
            for(i=0;i<6;i++){
                    arrayA[i]=i;
            }
     
            //La partie intéressante, on recopie les adresses dans les deux tableaux
            for(i=0;i<3;i++){
                    arrayB[i]=arrayA+i;
                    arrayC[i]=arrayA+i+3;
            }
     
           //Affichage avec les premieres valeurs
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            //On modifie arrayA
    	arrayA[0]=3;
    	arrayA[4]=40;
            //Repercution sur B et C
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            return 0;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Le but n'était pas de trier les nombres mais de mettre les nombres dans les bons tableaux sans faire d'opérations (nombres pair dans un tableau, nombre impaire dans un autre tableau). désolé si je n'ai pas été clair dans l'exemple


    Citation Envoyé par Sve@r Voir le message
    Salut
    Effectivement, dans le code que tu nous présentes il n'y a aucun calcul pour réordonner le tableau mais c'est parce que le tableau "arrayA" est déjà trié vu que tu l'as rempli avec les entiers naturels !!!

    Alors que si tu prends ton tableau initial ArrayA = { 1 , 10 , 2 , 11 , 3 , 12}, que tu fasses une recopie des nombres ou que tu pointes les cases contenant leur adresse, tu es quand-même obligé de faire un algo pour les trier. Ou alors c'est que j'ai rien compris à cette phrase


    Effectivement, le seul avantage que tu auras à passer par des pointeurs c'est qu'il n'y a au final qu'un seul tableau de valeurs. Et donc la modification du contenu du tableau est répercutée quand on l'affiche par les pointeurs...

    Accessoirement, dans ton exemple les malloc sont inutiles
    Code c : 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
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
            int arrayA[6];
            int* arrayB[3];
            int* arrayC[3];
            int i;
     
            //initialisation de arrayA pour l'exemple
            for(i=0;i<6;i++){
                    arrayA[i]=i;
            }
     
            //La partie intéressante, on recopie les adresses dans les deux tableaux
            for(i=0;i<3;i++){
                    arrayB[i]=arrayA+i;
                    arrayC[i]=arrayA+i+3;
            }
     
           //Affichage avec les premieres valeurs
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            //On modifie arrayA
    	arrayA[0]=3;
    	arrayA[4]=40;
            //Repercution sur B et C
    	for(i=0;i<3;i++){
    		printf("arrayB[%d] : %d\narrayC[%d] : %d\n\n",i,*arrayB[i],i,*arrayC[i]);
    	}
            return 0;
    }

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    donc ??
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut réponse
    Citation Envoyé par souviron34 Voir le message
    donc ??
    Donc Al_th m'a donné ma réponse.
    Merci à tous pour vos réponses, ça fait plaisir un forum aussi dynamique :p

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Citation Envoyé par mattox37 Voir le message
    Donc Al_th m'a donné ma réponse.
    Merci à tous pour vos réponses, ça fait plaisir un forum aussi dynamique :p
    À ton service, mais je crois que ce que souviron34 voulait te dire, c'est que lorsque tu considères ton problème comme ayant reçu la réponse que tu attendais et donc est résolu, il faut cliquer sur le bouton en bas de page pour marquer ta discussion comme telle.

    Tu pourras éventuellement la faire repasser à l'état non résolu par la suite si tu as des choses à ajouter.

Discussions similaires

  1. Tableau de pointeur de fonction
    Par Gryzzly dans le forum C
    Réponses: 7
    Dernier message: 31/12/2005, 10h47
  2. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45
  3. [GCC] Tableau de pointeurs pour accès multiples en asm
    Par Flo. dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 12/12/2005, 08h47
  4. tableau de pointeurs
    Par seal3 dans le forum C++
    Réponses: 7
    Dernier message: 01/11/2005, 20h51
  5. Tableau de pointeurs de fonctions
    Par Alp dans le forum C++
    Réponses: 7
    Dernier message: 29/10/2005, 13h19

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