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 :

Plantage de pthread


Sujet :

C

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Plantage de pthread
    Bonjour,

    Je réalise le code suivant qui semble trés basic et qui me génére systématiquement une erreur du type "Critical system error" au moment du pthread_create. J'ai beau débugger et chercher je ne vois vraiment pas ou est le probléme.
    Si quelqu'un arrive à voir ce qui se passe, ca fait 2 heures que je suis là dessus
    Merci d'avance

    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
     
    struct dataE {
      int n,npoint;
      double *cord,*loss;
    } my_structE;
     
     
    void *myThreadE(void *arg)
    {
      struct dataE *d;
      d = (struct dataE *)arg;
      printf("start:%d\n",d->n);
      pthread_exit(NULL);
      return(NULL);
    }
     
     
    void fonction()
    {
     
      int i,rc,Nthr=2;
      pthread_attr_t *thAttr[Nthr];
      pthread_t tid[Nthr];
      void *status;
     
     
      struct dataE d[Nthr];
     
      for (i=0;i<Nthr;i++) {
        thAttr[Nthr]=NULL;
        d[i].n=i;
        d[i].npoint=i*2;
        d[i].cord=NULL;
        d[i].loss=NULL;
      }
     
      for (i=0;i<Nthr;i++) {
        pthread_create(&tid[i], thAttr[i], myThreadE, (void *)&d[i]);
      }
     
      for(i=0; i<Nthr; i++) {
        rc = pthread_join(tid[i],&status);
        if (rc) {
          char lig[1000];
          sprintf(lig,"ERROR: return code from pthread_join() is %d\n",rc);
          exitc_(lig,0);
        }
      }
    L'affichage donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    start:1
    Critical system error:
    Resource temporarily unavailable

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Tu es sur de l'embarqué?

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Non, machine PC windows & Linux classique avec multicore biensur

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    C'est quoi cette fonction exitc_()? peux tu poster un code qui compile qui reproduise le problème?

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ho, désolé, j'ai simplifié un peu le probleme et oublié cette fonction inutile pour le probleme que j'evoque ici

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (i=0;i<Nthr;i++) {
        thAttr[i]=NULL; /* !! */
        d[i].n=i;
        d[i].npoint=i*2;
        d[i].cord=NULL;
        d[i].loss=NULL;
      }

  7. #7
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui je suis d'accord, cela ne sert à rien, mais par default create_pthread attend un parmaetre NULL

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Oui je suis d'accord, cela ne sert à rien, mais par default create_pthread attend un parmaetre NULL
    Justement ! A cause de cela, les valeurs de ton tableau de pointeurs ne sont plus mises à NULL et contiennent donc des valeurs indéterminées. Cela provoque alors une erreur de segmentation lorsque la fonction tente de lire à ces adresses-là.

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

Discussions similaires

  1. [Pthreads-win32]: plantage de libpthreadGC2.a ?
    Par dmichel dans le forum Bibliothèque standard
    Réponses: 7
    Dernier message: 11/12/2008, 11h11
  2. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  3. Réponses: 7
    Dernier message: 20/08/2003, 10h33
  4. plantage a la deconnexion du client
    Par travail dans le forum 4D
    Réponses: 3
    Dernier message: 05/06/2003, 13h39
  5. [Kylix] Plantage IDE Kylix3/Mandrake 9.0
    Par OmicroN dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2003, 23h04

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