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 :

utilisation de fopen qui plante, ou?? pourquoi???


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut utilisation de fopen qui plante, ou?? pourquoi???
    Bonjour,

    Dans mon projet j'ouvre une image et la parcours en sous bloc, au total il y en a 256.

    Pour chaque sous bloc je souhaite construire un histogramme des gradients en faisant une sortie fichier (Excel) afin de pouvoir visualiser les courbes et y appliquer des traitements typique à Excel.

    Malheureusement mon fopen plante, j'ai testé 2 solutions:
    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
    			for(j=0; j<block; j++) // Parse blocks
    			{
    			  for(i=0; i<block; i++)
    			  {
                                 ...
    				FILE *pp;
    				char *nomgrad = "histgrad.dat";
    				pp = fopen(nomgrad, "a+t");
    //				remove("histgrad.dat");
    				for(k=0;k<512;k++)
    					fprintf(pp, "%d\t", histogram_grad[k]);
    				fprintf(pp, "\r");
    				fclose(pp);
     
    }
    }
    et
    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
     
    remove("histgrad.dat");
    FILE *pp;
    char *nomgrad = "histgrad.dat";
    pp = fopen(nomgrad, "a+t");
    			for(j=0; j<block; j++) // Parse blocks
    			{
    			  for(i=0; i<block; i++)
    			  {
                                 ...
    				for(k=0;k<512;k++)
    					fprintf(pp, "%d\t", histogram_grad[k]);
    				fprintf(pp, "\r");
     
                                }
                              }
    fclose(pp);
    Mais ni l'une ni l'autre des solutions ne fonctionnent, j'ai une erreur Access violation NTDLL.DLL

    quelqu'un sait pourquoi??

  2. #2
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Une petite question: le plantage est -il sur fopen ou sur fprintf?
    Tu ne testes pas le code retour de fopen(), si il te renvoie NULL, fprintf() va se planter en access violation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ((pp = fopen(nomgrad, "a+t"))==NULL){
       fprintf(stderr, "erreur fopen\n");
       /* le traitement d'erreur approprié à ton problème*/
    }
    Une autre question: je ne connais pas le flag t pour fopen(). Que signifie-t'il?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    Le prog plante sur le fopen, et c'est vrai je ne le test pas.

    Mais mon objectif est de récupèrer TOUT les points donc ça marche entièrement ou ça marche pas, alors si il arrive pas a faire son fopen je considère que ça marche pas.

    pour le t, ça signifie text mode: http://www.cplusplus.com/ref/cstdio/fopen.html
    je t'avoue que je l'ai utilisé parce que dans l'exemple c'est ce qu'ils ont fait...

  4. #4
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Essaie quand même de tester le code retour, c'est plus propre et ça aide à debugger
    Si tu as une erreur, tu sors proprement.
    Merci pour l'info sur le t.

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par joellel
    Une autre question: je ne connais pas le flag t pour fopen(). Que signifie-t'il?
    Ca n'existe pas (en fait, c'est une extension MS-DOS complètement inutile, le mode par défaut étant texte...)

  6. #6
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ca n'existe pas (en fait, c'est une extension MS-DOS complètement inutile, le mode par défaut étant texte...)
    Merci

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ca n'existe pas (en fait, c'est une extension MS-DOS complètement inutile, le mode par défaut étant texte...)
    Emmanuel >> MSDN précise ceci
    Citation Envoyé par MSDN
    If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. If t or b is prefixed to the argument, the function fails and returns NULL.
    Ce que j'ai surligné en gras c'est du C ou du spécifique MicroSoft ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Trap D
    Emmanuel >> MSDN précise ceci
    Ce que j'ai surligné en gras c'est du C ou du spécifique MicroSoft ?
    C'est pas du C. Il n'y a pas d'idendificateur qui commence par _ en C standard. C'est forcément de l'implémentation. Dans le doc de Borland, j'avais lu un jour (il y a longtemps) que fmode (ou _fmode, je ne sais plus) était sur 'text' par défaut, ce qui rend le 't' inutile.
    The Borland C++ Builder help page for fopen() says:

    Prototype:
    FILE *fopen(const char *filename, const char *mode);
    FILE *_wfopen(const wchar_t *filename, const wchar_t *mode);

    Description:
    Opens a stream.

    fopen opens the file named by filename and associates a stream with it. fopen returns a pointer to be used to identify the stream in subsequent operations.

    The mode string used in calls to fopen is one of the following values:
    Value: Description:
    r Open for reading only.
    w Create for writing. If a file by that name already exists, it will be overwritten.
    a Append; open for writing at end-of-file or create for writing if the file does not exist.
    r+ Open an existing file for update (reading and writing).
    w+ Create a new file for update (reading and writing). If a file by that name already exists, it will be overwritten.
    a+ Open for append; open (or create if the file does not exist) for update at the end of the file.

    To specify that a given file is being opened or created in text mode append a t to the mode string (rt w+t and so on). Similarly to specify binary mode append a b to the mode string (wb a+b and so on). fopen also allows the t or b to be inserted between the letter and the + character in the mode string; for example rt+ is equivalent to r+t.

    If a t or b is not given in the mode string the mode is governed by the global variable _fmode. If _fmode is set to O_B/INARY files are opened in binary mode. If _fmode is set to O_TEXT they are opened in text mode. These O_... constants are defined in fcntl.h.

    When a file is opened for update, both input and output can be done on the resulting stream; however, output cannot be directly followed by input without an intervening fseek or rewind input cannot be directly followed by output without an intervening fseek, rewind, or an input that encounters end-of-file

    Return Value:
    On successful completion fopen returns a pointer to the newly opened stream. In the event of error it returns NULL.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    J'ai voulu vérifié que mon problème est bien lié à l'utilisation de fopen() ... alors j'ai commenté tout ce qui y avait rapport et je me récupère encore l'erreur NTDLL sur une déclaration de mémoire....
    Pourtant j'ai vérifié ce fichier avec une sauvegarde et je n'ai touché à aucun indice dans des tableaux...

    Bref je met ma sauvegarde à jour et je fais les modifications suggérées par Emmanuel et cette fois ci tout devrait marcher...enfin je l'espère

  10. #10
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par gronaze
    Bonjour,

    Dans mon projet j'ouvre une image et la parcours en sous bloc, au total il y en a 256.

    Pour chaque sous bloc je souhaite construire un histogramme des gradients en faisant une sortie fichier (Excel) afin de pouvoir visualiser les courbes et y appliquer des traitements typique à Excel.

    Malheureusement mon fopen plante, j'ai testé 2 solutions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			for(j=0; j<block; j++) // Parse blocks
    			{
    			  for(i=0; i<block; i++)
    			  {
                                 ...
    				FILE *pp;
    				char *nomgrad = "histgrad.dat";
    				pp = fopen(nomgrad, "a+t");
    t est inconnu au bataillon pour le mode d'ouverture de fichier (en C standard en tout cas), c'est "a+", append en mise à jour. C'est à dire en gros que tu te places à la fin du fichier et tu peux effectuer dessus des opérations d'écriture.

    Il faut tester si l'ouverture a bien réussi et si possible avoir initialisé pp avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FILE *pp = NULL;
    char *nomgrad = "histgrad.dat";
    pp = fopen(nomgrad, "a+");
    if(!pp) {
       fprintf(stderr,"Erreur ouverture fichier %s\n", nomgrad);
       exit(EXIT_FAILURE);
    }
    Si tu n'arrives pas à ouvrir le fichier, c'est qu'il y a de fortes chances que le chemin ou le nom de celui-ci ne soit pas bon. Ceci est valable pour tes 2 solutions. Sinon, le fclose est bien là, donc à priori, le souci "d'access violation", autrement dis, j'accède à de la mémoire où j'ai pas le droit, cela peut venir d'histogram_grad (comment est-il déclaré/défini) ou d'ailleurs.


    Citation Envoyé par gronaze
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //				remove("histgrad.dat");
    Tudieu !! heureusement que c'est commenté, tu peux virer la ligne.

    Sinon, même topo pour ta seconde solution.

    A+

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    Euuh... j'ai essayé les modifications que tu m'a donné Foobar1329, mais de la mçeme manière le programme plante....grrr

    je me dit que le problème doit peut être venir d'autre chose, donc je regarde si il y a pas un truc anormal.

    Pour la déclaration du tableau histogram_grad elle est faite avant la double boucle et au début de la boucle sur j toutes les valeurs de histogram_grad sont initialisées à zéro.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    au fait
    Tudieu !! heureusement que c'est commenté, tu peux virer la ligne.
    pourquoi tu dis ça?? je l'utilise dans pas mal d'endroit sans soucis, est ce mal?

  13. #13
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par gronaze
    au fait


    pourquoi tu dis ça?? je l'utilise dans pas mal d'endroit sans soucis, est ce mal?
    Ah ben dans ta première solution, là où il est situé, oui, ç'est mal. remove() ne doit être appliqué que sur un flux fermé (sinon, c'est dépendant de l'implémentation, mais je ne vois pas ce que cela apporte...). Or, tu faisais ton remove() après le fopen() !! Celui -ci aurait dû être avant le fopen() et même avant la double boucle.

    A+

  14. #14
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    1/ J'insiste... Que te renvoie fopen()?

    2/ En plus, si tu programmes en C, ce n,'est pas propre de redéclarer pp et nomgrad à chaque tour de boucle. Sors les déclarations des boucles.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    a la première passe le fopen me renvoit quelque chose qui a l'air d'être une structure de fichier, et à la seconde passe j'ai mon erreur NTDLL access Violation qui sort (dans le cadre du débuggage pas à pas)

    et pour les déclarations de pp et nomgrad je suis en c++ donc a priori c'est sans importance, et même plutôt mieux au niveau de la gestion de la memoire si je ne m'abuse?!

    je vois pas trop d'où ça pourrait venir....

  16. #16
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par gronaze
    a la première passe le fopen me renvoit quelque chose qui a l'air d'être une structure de fichier, et à la seconde passe j'ai mon erreur NTDLL access Violation qui sort (dans le cadre du débuggage pas à pas)
    Et donc, l'access violation est-elle bien sur le fopen() ? Tu dois bien le savoir si tu va en pas à pas.

    Citation Envoyé par gronaze
    et pour les déclarations de pp et nomgrad je suis en c++ donc a priori c'est sans importance, et même plutôt mieux au niveau de la gestion de la memoire si je ne m'abuse?!
    Hopala, rien à voir avec le C++ ici. Déclarer et définir une variable locale (automatique ou dynamique) à chaque tour de boucle comme c'est le cas ici n'est pas bon ni en C ni en C++ où la "pile" va beaucoup travailler pour les variables auto de même que des allocations/libérations de mémoire à chaque tour pour des variables de type pointeur vont bouffer du temps inutilement.

    A+

  17. #17
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par gronaze
    Euuh... j'ai essayé les modifications que tu m'a donné Foobar1329, mais de la mçeme manière le programme plante....grrr

    je me dit que le problème doit peut être venir d'autre chose, donc je regarde si il y a pas un truc anormal.

    Pour la déclaration du tableau histogram_grad elle est faite avant la double boucle et au début de la boucle sur j toutes les valeurs de histogram_grad sont initialisées à zéro.
    Justement, comment est déclaré et défini histogram_grad ? Il ne doit pas y avoir plus de 512 éléments, de type int à ce que l'on peut deviner. J'escompte bien que histogram_grad soit déclaré, défini, et même initialisé comme suit :

    int histogram_grad[512] = { 0 };

    A+

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    bon je vous met mon 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
    		short histogram_grad[512]; // Spatial gradient intensity
    		short histo[256]; // Spatial gradient intensity
     
    remove("histgrad.dat");
    remove("histo.dat");
     
         ...
     
    			for(j=0; j<block; j++) // Parse blocks
    			{
    			  for(i=0; i<block; i++)
    			  {
     
    				...
     
    				// Histogram initialization 
    				for(k=0; k<256; k++)
    					histo[k] = 0;
     
    				// Histogram_grad initialization 
    				for(k=0; k<512; k++)
    					histogram_grad[k] = 0;
     
     
    				ptr_in = in + j*h4*width+i*w4;
    				ptr_out = out + j*h4*width+i*w4;
     
    				for(k=0; k<h4; k++) // Parse pixels within a block
    				{
    					for(short l=0; l<w4; l++)
    					{
    						if((i*w4+l < width) && (j*h4+k < height))
    						  {						
    								short pp1r = *(ptr_in+1); // Pixel + 1 row
    								  short pp1l = *(ptr_in+width); // Pixel + 1 line
    								  short gradient_x = (short) fabs(pp1r - *(ptr_in));
    								  short gradient_y = (short) fabs(pp1l - *(ptr_in));
    								  short gradient = gradient_x + gradient_y;
     
    								  histogram_grad[gradient]++;
     
    								  *ptr_out++ = gradient;
    								  sum_gradient += gradient;
    								  histo[*(ptr_in)]++;
    								  *(pict2++) = *(ptr_in++);
    								  end = false;
    						  }
    							else
    							{
    								end = true;
    								break;
    							}
     
    					}
     
    					if(!end)
    					{
    						ptr_in += offset;
    						ptr_out += offset;
    					}
    				} // End block parsing
     
     
    //Debug only
    for(k=0;k<512;k++)
    	printf("%3d  ",  histogram_grad[k]);
     
    				FILE *pp = NULL;
    				char *nomgrad = "histgrad.dat";
    				pp = fopen(nomgrad, "a+");
    				if(!pp) {
    					   fprintf(stderr,"Erreur ouverture fichier %s\n", nomgrad);
    					   exit(EXIT_FAILURE);
    				}
    				for(k=0;k<512;k++)
    					fprintf(pp, "%d\t", histogram_grad[k]);
    				fprintf(pp, "\r");
    				fclose(pp);
     
                                     ....
     
    			} 
    		}// End Picture parsing

  19. #19
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Je persiste à penser que c'est ta redéfintion de variable qui pose un problème.
    J'ai testé ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
     
    int main(void){
     
    FILE *pp = NULL;
    char *nomgrad = "histgrad.dat";
    pp = fopen(nomgrad, "a+");
     
    FILE *pp = NULL;
    char *nomgrad = "histgrad.dat";
    pp = fopen(nomgrad, "a+");
    return 0;
    }
    J'ai obtenu l'erreur de compilation (sous VC) suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    C:\C\essai10\essai10.cpp(9) : error C2374: 'pp' : redefinition; multiple initialization
    C:\C\essai10\essai10.cpp(10) : error C2374: 'nomgrad' : redefinition; multiple initialization

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Par défaut
    j'ai regardé de manière plus approfondie, et mon fichier existe bien après le premier fclose(pp), j'ai toute une ligne de valeur dans "histgrad.dat" (c'est bien ce que je souhaitais)

    Et au passage suivant devant le fopen j'ai pp qui vaut mon adresse NULL car le programme plante avec NTDLL pourtant aucune de mes valeurs de histogram_grad est indéfinie ou autre choses, elles sont toutes correctes.

    ??

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

Discussions similaires

  1. formatage qui plante pourquoi?
    Par gaston11 dans le forum Débuter
    Réponses: 3
    Dernier message: 06/01/2013, 22h27
  2. Pourquoi mon blog utilise index.php qui ralentit tout ?
    Par -aAdrien dans le forum Général Conception Web
    Réponses: 14
    Dernier message: 20/12/2011, 07h58
  3. Programme qui plante, pourquoi ?
    Par ganjarasta dans le forum Réseau
    Réponses: 5
    Dernier message: 24/11/2011, 23h07
  4. Test d'une demo javafx qui plante, Pourquoi ?
    Par patmaba dans le forum JavaFX
    Réponses: 5
    Dernier message: 16/12/2008, 18h55
  5. [debutant] - Simple script qui plante IE.. comprend pas pourquoi..
    Par ShinJava dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2006, 23h06

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