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 pthread et structure


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 33
    Points : 32
    Points
    32
    Par défaut Utilisation de pthread et structure
    Bonjour,
    J'ai un petit problème que je n'arrive pas à comprendre.
    voici 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
    #include <pthread.h>
    #include <stdio.h>
    #include <stdbool.h>
    
    #define MAX 16
    
    typedef bool echiquier[MAX][MAX];
    
    
    struct MyArgs
    {
      int i;
      char s[16];
      echiquier e;
    };
    
    void* nreines(void *p)
    {
      struct MyArgs *args = p;
      if(args->e[10][10])
        {
          printf("ok\n");
        }
         printf("Got %d %s\n", args->i, args->s);
         
         return NULL;
    }
    
    
    int main()
    {
      pthread_t id;
      echiquier e;
      e[10][10]=true;
      struct MyArgs args = { 42, "TazForEver", e };
      
      if(pthread_create(&id, NULL, nreines, &args) != 0)
        {
          perror("thread_start" );
          return 1;
        }
      
      if(pthread_join(id, NULL) != 0)
        {
          perror("thread_join" );
          return 2;
        }
      
      return 0;
    }

    Le problème est que je passe e[10][10] à true dans la fonction main et ensuite je construit un element du type MyArgs avec ce même e.

    Ce que je ne comprends pas c'est pourquoi la valeur de e[10][10] n'est pas conservée dans nreines.
    Si j'enleve e[10][10] de la fonction nreines, "ok" ne s'affiche pas.

    Voilà si vous avez des idées elles sont les bienvenues.

    Merci d'avance
    Nieli

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Compile avec les warnings (-Wall avec gcc):
    Citation Envoyé par gcc -Wall...
    nieli.c: In function 'main':
    nieli.c:35: warning: missing braces around initializer
    nieli.c:35: warning: (near initialization for 'args.e')
    nieli.c:35: warning: the address of 'e' will always evaluate as 'true'
    Diagnostic ? gcc a essayé de remplir ton e de args avec l'adresse de e, donc true (et tout le reste à 0, i.e. false).

    Conclusion ? Changer le type struct myArgs avec un echiquier *e et initialiser args avec &e (et pas besoin de changer nreines), et ça marche

Discussions similaires

  1. Utilisation de void* avec structures
    Par LaMainSurLeKatana dans le forum C++
    Réponses: 10
    Dernier message: 15/09/2010, 23h56
  2. Utilisation de vector de structure en C++
    Par gilims dans le forum C++
    Réponses: 28
    Dernier message: 10/04/2010, 18h17
  3. Réponses: 2
    Dernier message: 23/02/2009, 11h23
  4. [Visual C++] Utilisation de pthread
    Par Stupeflip dans le forum Windows
    Réponses: 4
    Dernier message: 23/02/2007, 14h36
  5. [XML] utilisations de fichiers à même structures
    Par mariemor64 dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 05/10/2006, 11h29

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