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 :

pointeur sur structure


Sujet :

C

  1. #1
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut pointeur sur structure
    salut,
    J'aurai besoin d'un petit coup de main pour arriver à retrouver les infos dont j'ai besoin dans un structure de structures :

    Je ne comprends pas comment accèder au parent qui se trouve dans la structure tx. Le dernier print de mon main ne fonctionne pas.
    Voyez-vous où je me trompe ?

    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
    typedef struct txnode {
    	int32_t           taxid;
    	int32_t           rank;
    	struct txnode  *parent;
    	char              *name;
    } tx;
     
    typedef struct {
    	int32_t count;
    	tx taxon[1];
    } txid;
     
    typedef struct {
    	rankid *ranks;
    	txid   *taxons;
    } taxo;
     
    int main(int argc, char **argv){
    	char	*prefix	       = NULL;
    	taxo 	*taxonomy  = NULL;
    	tx	 *son		= NULL;	
    	/*  
    	récupération des arguments...
    	*/
    	taxonomy = read_taxo(prefix);	   // lit la base de données - ok
    	son = findtaxonbyid(taxonomy, id);   // retrouve un individu - ok
    	printf("# %s\n", son->name);		    // fonctionne - ok
    	printf("# %s\n", son->parent->name);	// ne fonctionne pas !
    	return 0;
    }
    merci pour vos conseils

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	printf("# %s\n", (son->parent)->name);
    ou à la limite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	printf("# %s\n", ((struct txnode *)(son->parent))->name);

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1. Ne fonctionne pas.
    2. Tu devrais vérifier la validité de chaque pointeur, avant de te jeter dessus...

    souviron34 : Rien à voir, la syntaxe est bonne et le type de parent est déjà le bon.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    C'est vrai que "ne fonctionne pas" c'est pas très précis ;
    donc en fait mon programme se lance et s'arrête brutalement avec le message 'bus error' sur le dernier print qui apparait dans le code ci-dessus.

    Tu devrais vérifier la validité de chaque pointeur
    Peux-tu détailler comment procéder, s'il te plait?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour commencer, tu peux vérifier que son n'est pas NULL, que son->parent n'est pas NULL, puis que son->parent->name n'est pas NULL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    son->name n'est pas NULL
    mais son->parent est NULL
    et j'ai 'bus error' sur le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (son->parent->name == NULL)
    ça veut dire qu'il faut revoir en amont, au moment de récupèrer les infos de la base de données ?

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    vivi

  8. #8
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    Ok, effectivement, il y avait une erreur dans le remplissage des structures.
    merci pour votre aide.

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

Discussions similaires

  1. lire pointeur sur structure en argument
    Par Linu6 dans le forum C
    Réponses: 3
    Dernier message: 23/09/2007, 00h53
  2. pointeur sur structures
    Par Seimaya dans le forum Débuter
    Réponses: 33
    Dernier message: 26/08/2007, 18h13
  3. Réponses: 6
    Dernier message: 07/07/2007, 18h12
  4. problème pointeur sur structure
    Par lejohn dans le forum C
    Réponses: 9
    Dernier message: 01/05/2007, 13h17
  5. Réponses: 2
    Dernier message: 21/03/2007, 10h55

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