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 expérimenté 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
    Points : 1 311
    Points
    1 311
    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 éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    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.

  4. #4
    Membre expérimenté 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
    Points : 1 311
    Points
    1 311
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    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...

  6. #6
    Membre expérimenté 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
    Points : 1 311
    Points
    1 311
    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 éminent sénior

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

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

  8. #8
    Membre expérimenté 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
    Points : 1 311
    Points
    1 311
    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