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 :

Visual Studio & Violation d'accès lors de la lecture


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 42
    Par défaut Visual Studio & Violation d'accès lors de la lecture
    Bonjour et meilleurs voeux pour l'année 2009 à tous.

    je code en C avec Visual Studio 2008 . mon but est de faire un client/ serveur avec socket . Depuis qlq jours, je rame, l'exécution de mon programme renvoie cette erreur: " 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000."

    L'orsque je debug, il s'avère que c'est cette partie du code qui fais problème:

    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
     
    int main()
    {
        pthread_t    tid[NBR_CLT];
        int i=0;
        int j=0;
     
        init();
     
        //Creation des Threads
        for (i=0; i<NBR_CLT; i++){
            pthread_create (&tid[i] , NULL ,app(), NULL);
        }
     
        for ( j=0 ; j<NBR_CLT; j++){
            pthread_join (tid[j],NULL);
            printf ("Process %lu fini\n", tid[j]);
        }
     
        end();
        getchar();
     
        return 0;
    }
    Plus précisement au niveau du "j" {du pthread_join (tid[j],NULL);}qui se trouve à l'emplacement 0x00000000.
    ça pourrais 'etre koi le pb???

  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
    A moins que la fonction app retourne un pointeur de fonction, tu devrais appeler pthread_create comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_create (&tid[i] , NULL , app, NULL);

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 42
    Par défaut
    je t'aime dèjà mon nicolas!! (simplement bien sûr)

    ça marche super cool now!!
    cependant, si c'est pas trop demandé, je pourrais avoir une explication en français facile de la raison du problème?

    Thanks

  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
    pthread_create() attend en 3ème paramètre l'adresse de la fonction à exécuter dans le nouveau thread. Toi, au lieu de lui passer l'addresse de la fonction app, tu exécutais la fonction app et passais en 3ème paramètre la valeur de retour (s'il y en avait une) de la fonction app.
    Cordialement.

  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 Pepson Voir le message
    je code en C avec Visual Studio 2008 . mon but est de faire un client/ serveur avec socket . Depuis qlq jours, je rame, l'exécution de mon programme renvoie cette erreur: " 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000."
    <...>
    Plus précisement au niveau du "j" {du pthread_join (tid[j],NULL);}qui se trouve à l'emplacement 0x00000000.
    ça pourrais 'etre koi le pb???
    Merci de poster du code complet...
    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
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c:3: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:4: error: `pthread_t' undeclared (first use in this function)
    C:\dev\hello\main.c:4: error: (Each undeclared identifier is reported only once
    C:\dev\hello\main.c:4: error: for each function it appears in.)
    C:\dev\hello\main.c:4: error: syntax error before "tid"
    C:\dev\hello\main.c:8: warning: implicit declaration of function `init'
    C:\dev\hello\main.c:11: error: `NBR_CLT' undeclared (first use in this function)
    C:\dev\hello\main.c:12: warning: implicit declaration of function `pthread_create'
    C:\dev\hello\main.c:12: error: `tid' undeclared (first use in this function)
    C:\dev\hello\main.c:12: error: `NULL' undeclared (first use in this function)
    C:\dev\hello\main.c:12: warning: implicit declaration of function `app'
    C:\dev\hello\main.c:16: warning: implicit declaration of function `pthread_join'
    C:\dev\hello\main.c:17: warning: implicit declaration of function `printf'
    C:\dev\hello\main.c:20: warning: implicit declaration of function `end'
    C:\dev\hello\main.c:21: warning: implicit declaration of function `getchar'
    Process terminated with status 1 (0 minutes, 0 seconds)
    7 errors, 8 warnings
    Ceci fonctionne :
    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
     
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <Windows.h>
     
    #define NBR_CLT 10
    struct data
    {
       int num;
    };
     
    void *app (void *p_user)
    {
       if (p_user != NULL)
       {
          struct data *p_data = p_user;
          printf ("Debut client %d\n", p_data->num);
          Sleep (1000 + rand () % 1000);
          printf ("Fin client %d\n", p_data->num);
       }
       return NULL;
    }
     
    int main (void)
    {
       pthread_t tid[NBR_CLT];
       struct data tdata[NBR_CLT];
       int i = 0;
       int j = 0;
     
       srand (time (NULL));
     
       /* Creation des Threads */
       for (i = 0; i < NBR_CLT; i++)
       {
          tdata[i].num = i + 1;
          pthread_create (&tid[i], NULL, app, tdata + i);
       }
     
       for (j = 0; j < NBR_CLT; j++)
       {
          pthread_join (tid[j], NULL);
          printf ("Process %d fini\n",j+1);
       }
     
       return 0;
    }
    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
     
    Debut client 1
    Debut client 3
    Debut client 5
    Debut client 7
    Debut client 9
    Debut client 2
    Debut client 6
    Debut client 4
    Debut client 8
    Debut client 10
    Fin client 3
    Fin client 1
    Fin client 5
    Process 1 fini
    Fin client 9
    Fin client 7
    Fin client 2
    Fin client 6
    Fin client 4
    Fin client 8
    Fin client 10
    Process 2 fini
    Process 3 fini
    Process 4 fini
    Process 5 fini
    Process 6 fini
    Process 7 fini
    Process 8 fini
    Process 9 fini
    Process 10 fini
     
    Process returned 0 (0x0)   execution time : 1.076 s
    Press any key to continue.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 42
    Par défaut
    Merci nicolas,
    On ne pouvais etre plus clair, c'st limpide now!!!!

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

Discussions similaires

  1. Violation d'accès lors de la lecture
    Par moooona dans le forum MFC
    Réponses: 2
    Dernier message: 27/05/2010, 17h52
  2. Violation d'accès lors de la lecture
    Par Adeel.dev dans le forum SDL
    Réponses: 1
    Dernier message: 21/05/2010, 20h23
  3. Réponses: 5
    Dernier message: 01/12/2009, 01h06
  4. Réponses: 7
    Dernier message: 13/08/2009, 09h01
  5. Violation d'accès lors de la lecture
    Par Fullmetal82 dans le forum C++
    Réponses: 9
    Dernier message: 29/11/2007, 17h13

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