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 :

pbm mémoire b-arbres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 56
    Par défaut pbm mémoire b-arbres
    voilà pour un tp de structure de données je dois implementer les b-arbres en C.

    voici la strcuture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct {
            int val;
            struct b* fils;
    } TVAL;
     
    typedef struct b{
            int nbVal;
            struct b* premierfils;
            TVAL TabVal[4];
            } NOEUD;
     
    typedef NOEUD *ARBRE;

    et mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main(){
    ARBRE b = (ARBRE)malloc(sizeof(NOEUD));
    int i=3;
    b->premierfils=NULL;
    b->TabVal[0].val = 5;
    b->TabVal[1].val = 6;
    b->nbVal=3;
    b->premierfils->TabVal[0].val = 1;
     
    Affiche(b);
    system("pause");          
    return 1;
    }
    le pbm se situe au niveau de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b->premierfils->TabVal[0].val = 1;
    à mon avis il faudrai allouer de la mémoire pour premierfils
    j'ai tenté avec (b*)malloc<etc...> ça marche pas (je m'en doutais un peu)


    comment faire?

    merci

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    D'abord tu fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b->premierfils=NULL;
    Et ensuite, tu fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    b->premierfils->TabVal[0].val = 1;
    Sans allocation, c'est normal qu'il y ait un problème. Il faudrait donc faire un malloc avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    b->premierfils = malloc(sizeof(*(b->premierfils));
    if(b->premierfils==NULL)
    {
    /*Gestion de l'erreur*/
    }
    Remarque que je ne fais pas de cast puisqu'avec malloc, on n'en fait pas et que je traite le cas où malloc retourne NULL puisqu'avec malloc faut le faire

    Jc

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 56
    Par défaut
    merci pour ta reponse !!

    96 C:\Documents and Settings\Jerem\Bureau\Semestre6\STDO\arbrebcours.cpp invalid conversion from `void*' to `b*'
    je vien de tester...

    faudrai le forcer qur quelque chose non ??
    mais quoi??? :

  4. #4
    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 Re: pbm mémoire b-arbres
    Citation Envoyé par [thebadskull
    ]voilà pour un tp de structure de données je dois implementer les b-arbres en C.
    Merci de poster du code compilable... On ne sait pas ce que tu as oublié (il y a des cast suspects).
    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
     
    Compiling: main.c
    main.c: In function `main_':
    main.c:16: error: implicit declaration of function `malloc'
    main.c:16: warning: nested extern declaration of `malloc'
    <internal>:0: warning: redundant redeclaration of 'malloc'
    main.c:18: error: `NULL' undeclared (first use in this function)
    main.c:18: error: (Each undeclared identifier is reported only once
    main.c:18: error: for each function it appears in.)
    main.c:24: error: implicit declaration of function `Affiche'
    main.c:24: warning: nested extern declaration of `Affiche'
    main.c:25: error: implicit declaration of function `system'
    main.c:25: warning: nested extern declaration of `system'
    main.c:17: warning: unused variable `i'
    Process terminated with status 1 (0 minutes, 0 seconds)
    Je te conseille de soigner tes identificateurs et de ne pas cacher les pointeurs :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <stdlib.h>
     
    typedef struct
    {
       int val;
       struct b* fils;
    }
    TVAL;
     
    typedef struct b
    {
       int nbVal;
       struct b* premierfils;
       TVAL TabVal[4];
    }
    NOEUD;
     
    int main (void)
    {
       NOEUD *p_root = malloc (sizeof * p_root);
     
       if (p_root != NULL)
       {
          int i = 3;
     
          p_root->premierfils = NULL;
          p_root->TabVal[0].val = 5;
          p_root->TabVal[1].val = 6;
          p_root->nbVal = 3;
          p_root->premierfils->TabVal[0].val = 1;
     
    #if 0
          Affiche(b);
    #endif
     
       }
       return 0;
    }
    Evidemment, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          p_root->premierfils = NULL;
          ...
          p_root->premierfils->TabVal[0].val = 1;
    le comportement est indéfini. Il faut allouer un bloc.

  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
    Citation Envoyé par [thebadskull
    ]
    96 C:\Documents and Settings\Jerem\Bureau\Semestre6\STDO\arbrebcours.cpp invalid conversion from `void*' to `b*'
    je vien de tester...

    faudrai le forcer qur quelque chose non ??
    mais quoi??? :
    C'est du C++, ça, pas du C...
    En C++ en effet, le cast est nécessaire...
    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
    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 [thebadskull
    ]
    96 C:\Documents and Settings\Jerem\Bureau\Semestre6\STDO\arbrebcours.cpp invalid conversion from `void*' to `b*'
    Tu te trompes de compilateur. Change l'extension en .c

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 56
    Par défaut
    merci !!
    je savais pas que ça influé autant l'extension ^^

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2012, 10h39
  2. [Arbres] Gestion de la mémoire
    Par Nanoc dans le forum C++
    Réponses: 18
    Dernier message: 21/12/2009, 12h04
  3. Allocation de mémoire, arbre binaire
    Par smyley dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/05/2009, 18h19
  4. Réponses: 11
    Dernier message: 24/04/2009, 19h56
  5. Réponses: 3
    Dernier message: 04/09/2007, 21h44

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