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 :

Erreur de segmentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Par défaut Erreur de segmentation
    Salut salut,

    Je travail sur les ipc sous unix ... et j'ai une belle erreur de segmentation ...

    Comment palier à ce problème ?

    voici le 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
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <sys/stat.h>
    #include <sys/msg.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <ctype.h>
    #include <errno.h>
    #include <fcntl.h>
     
     
    #define SHMKEY 654321
     
     
    int shmid,msqid;
    void *ptr_mem_partagee;
     
    typedef struct Athlete {
            int tps;
    	int pid;
    	int id;
    	char nomathlete[30];
     
    }a;
    a athlete; 
     
     
    void temps(int s);
     
    int main()
    { 
     int i;
     
     //on va chercher l'id du segment mémoire de la clé
     if ((shmid = shmget(SHMKEY, 1*sizeof(a), 0444)) < 0) 
     {
      perror("shmget");
      exit(1);
     }
     
     //on met le segment en mémoire partagée
     if ((ptr_mem_partagee = shmat(shmid, NULL, 0)) == (void*) -1) 
     {
      perror("shmat"); 
      exit(1);
     } 
     
     for(i=0;i<20;i++)
     {
      athlete = *((a*)ptr_mem_partagee + i);
      if(athlete.tps!=0)
      {
       printf("Id de l'athlete: %d\n",athlete.id);
       printf("Nom de l'athlete : %s",athlete.nomathlete);
       temps(athlete.tps);
      }
     }
     
     return 0;
    }
     
    void temps(int s)
    {
     int min;
     int sec;
     
     min=s/60;
     sec=s % 60;
     
     if(sec/10 == 0) printf("Temps du tour : %d'0%d''\n\n",min,sec); 
     else printf("Temps du tour : %d'%d''\n\n",min,sec);
    }
    merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut, sous unix, compile avec -g3 puis lance gdb. Sinon tu peux mettre des printf entre chaque ligne Je ne connais pas shmat, il faudra que tu répondes seul à mes questions: pourquoi tu envoies null à shmat pour le paramètre concernant l'adresse du segment de mémoire à partager? Pourquoi est-ce que tu testes un code de retour d'erreur égal à void* -1 ?

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Ceci ne me semble pas très cohérent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     if ((shmid = shmget(SHMKEY, 1*sizeof(a), 0444)) < 0) 
    
    ...
    
    for(i=0;i<20;i++)
    {
      athlete = *((a*)ptr_mem_partagee + i);
    }
    Tu as 1 ou tu as 20 athletes ?

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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