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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut Erreur de segmentation
    Bonjour,

    Voici mon problème.
    J'ai défini une tortue comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct 
    	{
    		cairo_t *cr;
    		int angle;
    	}
    	tortue;
    Ensuite je veux initialiser l'angle dans mon main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tortue *statique;
    (*statique).angle=50;
    Mais au moment de lancer mon exécutable il me renvoie erreur de segmentation (je sais que la syntaxe est bonne car j'arrive à compiler).

    Qulqu'un pourrait-il m'éclairer? Merci beaucoup d'avance

  2. #2
    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 sylvanus35 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct 
    	{
    		cairo_t *cr;
    		int angle;
    	}
    	tortue;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tortue *statique;
    (*statique).angle=50;
    Mais au moment de lancer mon exécutable il me renvoie erreur de segmentation
    Bah, si tu définis un pointeur, il faut lui donner une valeur valide. Déréférencer un pointeur non initialisé invoque un comportement indéfini. C'est le B.A. BA du C...
    (je sais que la syntaxe est bonne car j'arrive à compiler).
    Un compilateur correctement configuré aurait probablement repéré le problème...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Je ne comprend pas. Pourquoi ma valeur n'est-elle pas valide??(je débute en programmation

  4. #4
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Cela defini simplement un pointeur sur une structure "tortue" .. il faut donc que ta structure soit valide..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tortue statique;
    statique.angle=50;
    Cela fonctionnera mieux ... car tu créé directement un instance de ta structure dont tu modifie un paramètre.
    Tu peux très bien créer ensuite un pointeur sur cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    torture * p_statique = &statique;  // initialisé à l'adresse de ta structure .
    !!!!ATTENTION!!!! Il ne faut pas détruire ton instance "statique" .. et utiliser ton pointeur ensuite ...

  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 sylvanus35 Voir le message
    Je ne comprend pas. Pourquoi ma valeur n'est-elle pas valide??
    Parce que que quand on définit une variable locale en C, celle-ci n'est pas initialisée. Sa valeur est donc indéterminée.
    (je débute en programmation)
    Et ce n'est pas une question de 'programmation', mais de 'codage' (ici, le langage C).

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Ok. J'essaie comme ça. Merci

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Bon j'ai essyé mais pour être honête je ne suis pas sûr qu'il faut que je crée une structure tortue dans mon main.

    Dans mon sujet de TP il est demandé de programmer une fonction qui prend un argument un pointeur sur une tortue et un entier n et qui fait tourner la tortue de n degrés.

    Alors dans ma fonction main je suis obligé de définir un pointeur sur ma structure tortue et non pas une structure tortue. Non?

  8. #8
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Il faut de toute facon créer une instance de tortue quelque part ... tu peux très bien la créer dans le main et passer son adresse en paramètre lors de ton appel de fonction

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Voici ma fonction qui change l'angle de tortue


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int tourner(tortue *statique, int n)
    {
    	return (*statique).angle + n;
    }

    Et voici l'appel à ma fonction dans mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tortue statique;
    statique.angle=0;
    tortue *p_statique=&statique;
    int new_angle=tourner(p_statique,90);

    Est-ce comme ça qu'il faut faire??merci

  10. #10
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Citation Envoyé par sylvanus35 Voir le message
    Voici ma fonction qui change l'angle de tortue


    int tourner(tortue *statique, int n)
    {
    return (*statique).angle + n;
    }


    Et voici l'appel à ma fonction dans mon main :

    tortue statique;
    statique.angle=0;
    tortue *p_statique=&statique;
    int new_angle=tourner(p_statique,90);


    Est-ce comme ça qu'il faut faire??merci
    Essaye ...

    Le principal est que tu comprennes comment ca marche ...

  11. #11
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Et ce que ta fonction "tourner" doit modifier ta "tortue" ??

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    En fait je comprend pas vraiment comment ça marche mais quand j'aurais une fonction licite alors je pourais l'étudier et comprendre le fonctionnement des pointeurs. Mais pour l'instant je suis un peu dans le flou.

  13. #13
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Voici de la bonne lecture :

    http://c.developpez.com/faq/?page=pointeurs

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Ma fonction tortue doit modifier l'angle de ma tortue.

    Voici l'intitulé du sujet :
    2. Programmer la fonction tourner qui prend en argument un pointeur sur une tortue et un entier
    n et qui fait tourner la tortue de n degrés.
    3. Pourquoi la fonction tourner doit-elle prendre en argument un pointeur sur une tortue et pas
    une tortue tout simplement ?

  15. #15
    Expert confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Toutes tes réponses se trouve dans la avec toutes les explications nécessaires ...

    Je pourrais te donner la réponse à ton exercice .. mais tu ne comprendrais pas comment ca marche .. il vaut mieux trouver par toi même ..

    Les pointeurs sont une notion qui peut poser quelques difficulté à comprendre .. mais un fois comprise, c'est un outil très puissant

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