insertion dans structure

insertion dans structure - C - Programmation

Marsh Posté le 25-03-2009 à 14:48:37    

Bonjour,j'essaie de faire une insertion dans une structure mais ca ne marche pas comme je le souhaite:
 
 
 

Code :
  1. [cpp][cpp]int main(void){
  2.   srand((int)time(NULL));
  3.   struct objets placard =creer_struct();
  4.   for(int i =0;i<5;i++) {
  5.       int var=rand()%100;
  6.       inserer_structure(placard,var);
  7.   }
  8.   return EXIT_SUCCESS;
  9. }

[/cpp][/cpp]
 
 
le résultat est que ça m'insère toujours le même entier, ainsi dans ma structure je v avoir 5 fois la même valeur. ou alors si i est trop grand j'ai une erreur de segmentation.
quelqu'un aurait une idée svp?

Reply

Marsh Posté le 25-03-2009 à 14:48:37   

Reply

Marsh Posté le 25-03-2009 à 16:12:08    

ya personne?

Reply

Marsh Posté le 25-03-2009 à 16:16:26    

Montre le code des fonctions  creer_struct() et inserer_structure(). Et la définition de struct objets.

Reply

Marsh Posté le 25-03-2009 à 16:36:16    

tpierron a écrit :

Montre le code des fonctions  creer_struct() et inserer_structure(). Et la définition de struct objets.


Merci pour ta réponse voici le code que tu m'as demandé! lorrsque je fais un test avec inserer_b_arbre_entier(b,5);
insere_b_arbre_entier(b,18)... ca marche bien ca ne viendrait pas de la variable var?
 

Code :
  1. struct b_arbre_entier{
  2.      b_arbre deleg;
  3. };
  4. struct b_arbre{
  5.    noeud racine;
  6.    int ordre;
  7.    int(*compare)(const void *,const void *);
  8.    void(*affiche)(const void*,const void*,int c);
  9.    size_t taille;
  10. };
  11. void
  12. inserer_b_arbre(b_arbre self,void* e)
  13. {
  14.   noeud r=self->racine;
  15.   if(getnb_cles(r)==2*self->ordre-1){
  16.        noeud s=creer_noeud(self->ordre,self->taille);
  17.        self->racine =s;
  18.        modifier_feuille(s,false);
  19.        modifier_nb_cles(s,0);
  20.        noeud_allouer_fils(s,2*self->ordre*(sizeof(getfils(self->racine))));
  21.       modifier_fils_i(s,r,0);
  22.        partager_enfant(self,s,0,r);
  23.        inserer_b_arbre_incomplet(self,s,e);
  24. }
  25. else
  26.        inserer_b_arbre_incomplet(self,r,e);
  27. }

Reply

Marsh Posté le 25-03-2009 à 16:46:11    

1. Il me semble curieux de mettre les méthodes dans la structure b_arbre. L'arbre va contenir des structures qui pointent hiérarchiquement. Mais il me semble étrange de répeter les méthodes dans chaque noeud de l'arbre.
 
2. sizeof(getfils(self->racine)) me parait étrange. Il me semble que sizeof() est résolu lors de la compilation et non pas lors de l'exécution. Donc, ici, sizeof renverrait la longueur d'un pointeur vers une fonction (en l'occurence la fonction getfils()). Peut-être qu'il faudrait prendre sizeof(struct b_arbre) mais sans les méthodes.

Message cité 1 fois
Message édité par olivthill le 25-03-2009 à 16:48:30
Reply

Marsh Posté le 25-03-2009 à 16:55:22    

olivthill a écrit :

1. Il me semble curieux de mettre les méthodes dans la structure b_arbre. L'arbre va contenir des structures qui pointent hiérarchiquement. Mais il me semble étrange de répeter les méthodes dans chaque noeud de l'arbre.
 
2. sizeof(getfils(self->racine)) me parait étrange. Il me semble que sizeof() est résolu lors de la compilation et non pas lors de l'exécution. Donc, ici, sizeof renverrait la longueur d'un pointeur vers une fonction (en l'occurence la fonction getfils()). Peut-être qu'il faudrait prendre sizeof(struct b_arbre) mais sans les méthodes.


 
merci pour ta réponse mais pourrais je avoir des précisions stp?
 
1/ g pas tès bien compris ce que tu dis
 
2/pour le sizeof je suis assez d'accord donc je vais le modifier

Reply

Marsh Posté le 25-03-2009 à 17:02:49    

Désolé, j'ai parlé de méthodes, mais en fait c'est peut-être plutôt des pointeurs vers des fonctions. En tous cas, je ne vois pas bien l'intérêt des lignes 9 et 10 du code, mais il y a peut-être quelque chose qui m'échappe.

Message cité 1 fois
Message édité par olivthill le 25-03-2009 à 17:03:26
Reply

Marsh Posté le 25-03-2009 à 17:07:57    

olivthill a écrit :

Désolé, j'ai parlé de méthodes, mais en fait c'est peut-être plutôt des pointeurs vers des fonctions. En tous cas, je ne vois pas bien l'intérêt des lignes 9 et 10 du code, mais il y a peut-être quelque chose qui m'échappe.


 
en fait la taille c'est que je peux vouloir inserer des types differents dans ma structure(entiers,chaines de caractères..) j(ai donc besoin de la taille pour pouvoir fair mes allocation.
 
pour le pointeur de fonction c'est que la fonction d'affichage ne sera pas la meme pour un int ou un char*
 
ainsi lorsque je construit une structure je vais appeler creer_b_arbre en precisant le type dobjets a insere la taille et la fonction qui permettra de faire l'affichage

Reply

Marsh Posté le 25-03-2009 à 19:41:01    

Ouais, je crois qu'il va falloir tout le code qui dépend de inserer_b_arbre(). Parce qu'il y a potentiellement plein d'endroits où ça peut foirer (d'autant qu'avec les buffer/stack overflow en C, l'erreur peut se situer à des années lumières de là où croit qu'elle se trouve).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed