Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
727 connectés 

  FORUM HardWare.fr
  Programmation
  C

  soucis pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

soucis pointeurs

n°1864513
kiko_ta
Posté le 22-03-2009 à 17:00:13  profilanswer
 

Bonjour,
Bonjour j'ai quelques soucis avec les pointeurs voici mon code je travaille en c. je voudrais pouvoir inserer des entier dans la structure b_arbre_entier qui utilise le module générique b_arbre. mais g des gros soucis avecs les pointeurs:
 
 
 
void inserer_b_arbre_entier(b_arbre_entier self,int elem)
{
   void *tmp=(void *)&elem;
   inserer_b_arbre(self->deleg,tmp);
}
 
void
inserer_b_arbre(b_arbre self,void* e)
{
     noeud r=self->racine;
     if(r->nb_cles==2*self->ordre-1)
     {
           noeud s=creer_noeud(self->ordre,self->racine->compare,self->racine->taille);
           self->racine =s;
           s->feuille=false;
           s->nb_cles=0;
 
           s->fils=malloc(sizeof(self->racine));
           s->fils[0]=r;
           partager_enfant(self,s,0,r);
           inserer_b_arbre_incomplet(self,s,e);
     }
    else
          inserer_b_arbre_incomplet(self,r,e);
}
 
int main(void)
{
       b_arbre_entier b=creer_b_arbre_entier(2,compare,sizeof(int));
 
       inserer_b_arbre_entier(b,12);
       printf("%d\n",*((int*)(*(cles(racine(b->deleg))))));        //afiiche 12 ok
       inserer_b_arbre_entier(b,8);
       printf("%d\n",*((int*)(*(cles(racine(b->deleg))))));        //affiche 8 ok
       printf("%d\n",*((int*)(*(cles(racine(b->deleg))+1))));    // affiche 8 nonnnnnnn!!!
 
return EXIT_SUCCESS;
}
 
le soucis est qu'avant meme d'avoir fini la seconde insertion le premier élément est déjà changé. ainsi avant d'avoir affecté la valeur 8 à la structure, le premier élement n'est déjà plus 12 mais 8. je crois que c'est un problème de références mais je ne vois pas du tout mon erreur. si quelqun a une idée svp.

mood
Publicité
Posté le 22-03-2009 à 17:00:13  profilanswer
 

n°1864517
tpierron
Posté le 22-03-2009 à 17:36:55  profilanswer
 

Hmmouais. Ta fonction inserer_b_arbre_entier me parait pas correct du tout. Tu gardes des références d'élements pointant sur la pile dans des structures allouées dynamiquement. C'est condamné à se casser la figure.
 
Et plutôt que de te casser la tête à passer des références, passe directement la valeur entière :

Code :
  1. void inserer_b_arbre_entier(b_arbre_entier self,int elem)
  2. {
  3.      inserer_b_arbre(self->deleg, (void *) elem);
  4. }


Etc... va falloir adapter les appels dans la fonction main().
Ok, c'est un peu bancal comme approche (si sizeof (int) != sizeof (void*)), sinon va falloir passer par de l'allocation dynamique :

Code :
  1. void inserer_b_arbre_entier(b_arbre_entier self,int elem)
  2. {
  3.      int * entier = malloc(sizeof *entier);
  4.      if (entier) {
  5.          entier[0] = elem;
  6.          inserer_b_arbre(self->deleg, entier);
  7.      }
  8.      else fprintf(stderr, "Mais heu...\n" );
  9. }

 
 

n°1864519
kiko_ta
Posté le 22-03-2009 à 17:46:41  profilanswer
 

merci a toi tpierron je m-y met de suit. je te tiens au courant

n°1864525
kiko_ta
Posté le 22-03-2009 à 18:01:58  profilanswer
 

ca marche parfaitement merci beaucoup vraiment j'ai passé des heures dessus!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  soucis pointeurs

 

Sujets relatifs
Référence ou pointeurs?pointeurs intelligents Boost
Soucis avec preg_replace et balisesSoucis avec include dans le titre..
soucis affichage du site sur differents navigateursTemplates et pointeurs
[Résolu] [PHP] Soucis avec Header[Paybox] Infos diverses & futurs soucis de prog
FCKeditor soucis pour afficher le texteSoucis réalisation portfolio en AS3 : plusieurs MouseEvent
Plus de sujets relatifs à : soucis pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR