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 :

segmentation.fault pointeur ->de.*m.


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Points : 20
    Points
    20
    Par défaut segmentation.fault pointeur ->de.*m.
    Bonjour,

    j'ai un gros problème de pointeurs, enfin je pense que c'est ça qui me fait mon segmentation fault

    j'ai bien lus le tuto sur ce site, puis le tuto "des piles", mais je ne trouve toujours pas l'erreur...
    si quelqu'un à un tuto pour les gens qui ne comprennent toujours pas comme moi je suis preneur.
    sinon si quelqu'un à une idée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct SYNCHRONIZE
    {
        pthread_mutex_t *mutex;
        pthread_cond_t *cond;
        int test;
    }ST_syncro;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ST_syncro *syncro;
        syncro->test=5;
        printf("\nsyncro->test=|%d|\n",syncro->test);
        syncro->mutex = PTHREAD_MUTEX_INITIALIZER;
        syncro->cond =PTHREAD_COND_INITIALIZER;
    Merci ...

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Effectivement ton pointeur syncro n'est pas initialisé.

    Un pointeur doit être initialisé avec une adresse avant d'être utilisé.
    adresse d'une variable existante ou d'un bloc memoire crée avec malloc ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    pourrais-tu développer un peu ..s'il te plait

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Comme le dit Lucien63, votre pointeur n'est pas initialisé (pointe sur rien de précis).
    Pour ce faire il faut demander de la mémoire au système, pour que celle ci appartienne au programme.
    C'est très simple, voyez le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ST_syncro *syncro;
    syncro = (ST_syncro*) malloc(sizeof(ST_syncro));
    if ( syncro == NULL )
           // Il y a une erreur ici est faut la géré
           return 1;
    Le malloc demande au système de réservé la taille en mémoire de la stucture ST_syncro.
    Le pointeur sur cette mémoire fraichement alloué est mis dans syncro.
    Maintenant tu peux utilisé le pointeur. ( ne pas oublié de mettre des valeurs dans la structure car pour le moment elle sont non déterminé )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 47
    Points : 20
    Points
    20
    Par défaut
    Exacte, ça marche, vous avez "JUSTE".

    j'ignorais qu'il fallait faire un malloc à chaque fois que l'on déclare un pointer.

    Dans tous les cas merci beaucoup à vous deux.

    Bonne journée.

    Philippe

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    j'ignorais qu'il fallait faire un malloc à chaque fois que l'on déclare un pointer.
    Il n'est pas toujours nécessaire d'initialiser un pointeur par un malloc. Ce qu'il faut c'est lui donner une valeur légale : NULL ou l'adresse d'un objet existant.
    Dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ST_syncro *syncro;
        syncro->test=5;
    ce qui manque, c'est l'initialisation de syncro par l'adresse d'un objet ST_syncro.

    On pourrait écrire, pour illustrer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ST_syncro syncobjet;
        ST_syncro *syncro =  & syncobjet;
        syncro->test=5; // ce qui équivaut ici à syncobjet.test = 5
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2010, 10h38
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 19/10/2004, 23h52
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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