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


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Erreur
    Bonjour,

    J'ai ces erreurs à l'execution :
    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
    tree.c: In function ‘appartient’:
    tree.c:132: erreur: opérandes invalides pour le binaire !=
    tree.c: In function ‘creer_tableau_sommets’:
    tree.c:148: attention : passing argument 2 of ‘appartient’ from incompatible pointer type
    tree.c:149: erreur: request for member ‘x’ in something not a structure or union
    tree.c:150: erreur: request for member ‘y’ in something not a structure or union
    tree.c:151: erreur: request for member ‘z’ in something not a structure or union
    tree.c:155: attention : passing argument 2 of ‘appartient’ from incompatible pointer type
    tree.c:156: erreur: request for member ‘x’ in something not a structure or union
    tree.c:157: erreur: request for member ‘y’ in something not a structure or union
    tree.c:158: erreur: request for member ‘z’ in something not a structure or union
    tree.c:162: attention : passing argument 2 of ‘appartient’ from incompatible pointer type
    tree.c:163: erreur: request for member ‘x’ in something not a structure or union
    tree.c:164: erreur: request for member ‘y’ in something not a structure or union
    tree.c:165: erreur: request for member ‘z’ in something not a structure or union
    tree.c:169: attention : passing argument 2 of ‘appartient’ from incompatible pointer type
    tree.c:170: erreur: request for member ‘x’ in something not a structure or union
    tree.c:171: erreur: request for member ‘y’ in something not a structure or union
    tree.c:172: erreur: request for member ‘z’ in something not a structure or union
    tree.c: In function ‘main’:
    tree.c:191: erreur: array size missing in ‘sommets’
    tree.c:194: attention : passing argument 2 of ‘creer_tableau_sommets’ from incompatible pointer type

  2. #2
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    dans la fonction int appartient(Sommet s, Sommet sommets[]), Sommet sommets[] signie un tableau de Sommet donc chaque itération sommets ne sont pas des pointeurs donc ne peuvent pas etre comparé avec NULL.

    de plus, ton alglo est un peu (voir bcp) bancal :

    à la premiere itération de creer_tableau_sommets, en supposant que sommets soit un tableau de pointeur (vu que c'est comme ca que tu raisonnes), on a :

    int indice = 0;
    sommets[indice] = NULL;


    puis la fonction appartient est appellée et vu que c'est la premiere itération, on n'entre pas dans la boucle for donc on va directement dans le return 0 donc la condition if(!appartient(arbre->s0, sommets)) est valide donc on entre dans le if et la sommets[indice].x = arbre->s0.x; (au passage, si c'est un tableau de pointeur la syntaxe serait sommets[indice]->x = arbre->s0.x; ) fait badaboum puis que je rappelle que sommets[indice] = NULL;

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, je te dirais plutôt de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int appartient(Sommet s, Sommet *sommets)
    Dans ta fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void creer_tableau_sommets(t_cellule *arbre, Sommet *sommets[])
    tu as sommets qui est un tableau de pointeur de Sommet et ensuite dans cette fonction tu appelle ta fonction appartient où ton prototype est

    et non comme tu fais


  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    dans ta fonction
    void creer_tableau_sommets(t_cellule *arbre, Sommet *sommets[])

    sommets est un tableau de POINTEURS sur type Sommet, et tu dois donc allouer les cases, et apeller sommets[indice]->x etc

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Je n'ai pas tout regardé, mais tes erreurs semblent être un problème d'appel des attributs de tes structures : quand tu a un pointeur vers une structure on utilise la fleche "->" sinon le point "."...

    En gros dans cette fonction :

    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
     
    void creer_tableau_sommets(t_cellule *arbre, Sommet *sommets[]){
      int indice = 0;
      sommets[indice] = NULL;
     //on est dans une feuille
      if(arbre != NULL && arbre->NW == NULL && arbre->NE == NULL && arbre->SW == NULL && 
         arbre->SE == NULL){
        //on vérifie si le sommet s0 a déjà été inséré
        if(!appartient(arbre->s0, sommets)){
          sommets[indice].x = arbre->s0.x;
          sommets[indice].y = arbre->s0.y;
          sommets[indice].z = arbre->s0.z;
          indice ++;
        }
    [...]
    "sommets" est un tableau de pointeurs donc on doit écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [...]
    sommets[indice]->x = arbre->s0.x;
    [...]

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par la drogue c'est mal
    dans la fonction int appartient(Sommet s, Sommet sommets[]), Sommet sommets[] signie un tableau de Sommet donc chaque itération sommets ne sont pas des pointeurs donc ne peuvent pas etre comparé avec NULL.
    Comment mettre un marqueur de fin dans ce cas ?
    de plus, ton alglo est un peu (voir bcp) bancal :

    à la premiere itération de creer_tableau_sommets, en supposant que sommets soit un tableau de pointeur (vu que c'est comme ca que tu raisonnes), on a :

    int indice = 0;
    sommets[indice] = NULL;


    puis la fonction appartient est appellée et vu que c'est la premiere itération, on n'entre pas dans la boucle for donc on va directement dans le return 0 donc la condition if(!appartient(arbre->s0, sommets)) est valide donc on entre dans le if et la sommets[indice].x = arbre->s0.x; fait badaboum puis que je rappelle que sommets[indice] = NULL;
    Je ne sais pas combien d'éléments, j'aurais dans mon tableau et voulait donc incrémenté le tableau au fur et à mesure.
    Le tableau s'intialise comment dans ce cas?
    (au passage, si c'est un tableau de pointeur la syntaxe serait sommets[indice]->x = arbre->s0.x; )

  7. #7
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    Comment mettre un marqueur de fin dans ce cas ?
    comme dit précédement, il y a un probleme dans la signature de int appartient(Sommet s, Sommet sommets[]) puisqu'en appellant comme tu le fais appartient(arbre->s0, sommets) le 2e argument doit etre un pointeur de tableau donc ca devrait etre I]int appartient(Sommet s, Sommet * sommets[])[/I]

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par la drogue c'est mal
    comme dit précédement, il y a un probleme dans la signature de int appartient(Sommet s, Sommet sommets[]) puisqu'en appellant comme tu le fais appartient(arbre->s0, sommets) le 2e argument doit etre un pointeur de tableau donc ca devrait etre I]int appartient(Sommet s, Sommet * sommets[])[/I]
    Maitenant, je n'ai plus les erreurs à la compilation mais un seg fault à l'execution.
    C'est du à ce que tu indiquais concernant le fait que sommet[indice] = NULL
    mais je ne vois pas comment modifié ça

  9. #9
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    si tu mettais un malloc avant l'affectation du contenu de la structure, ca devrait aller mieux

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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