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

  FORUM HardWare.fr
  Programmation
  C

  insertion dans structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

insertion dans structure

n°1865688
kiko_ta
Posté le 25-03-2009 à 14:48:37  profilanswer
 

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?

mood
Publicité
Posté le 25-03-2009 à 14:48:37  profilanswer
 

n°1865735
kiko_ta
Posté le 25-03-2009 à 16:12:08  profilanswer
 

ya personne?

n°1865739
tpierron
Posté le 25-03-2009 à 16:16:26  profilanswer
 

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

n°1865764
kiko_ta
Posté le 25-03-2009 à 16:36:16  profilanswer
 

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. }

n°1865774
olivthill
Posté le 25-03-2009 à 16:46:11  profilanswer
 

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
n°1865785
kiko_ta
Posté le 25-03-2009 à 16:55:22  profilanswer
 

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

n°1865791
olivthill
Posté le 25-03-2009 à 17:02:49  profilanswer
 

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
n°1865800
kiko_ta
Posté le 25-03-2009 à 17:07:57  profilanswer
 

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

n°1865894
tpierron
Posté le 25-03-2009 à 19:41:01  profilanswer
 

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).


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

  insertion dans structure

 

Sujets relatifs
Insertion de text et Jcombobox dans un menu a ongletProblème de structure de base de donnée
[C] Allocation dynamique d'une grille de structure.Insertion video flash en HTML
[HTML/JAVA] Insertion code java dans une page HTMLprobleme structure
Problème de mise en page suite à l insertion d'un formulaireUnion de plusieurs tables de même structure avec somme
[c#: windowsForm, MySql]Insertion d'une ligne dans un tableProblème d'attribution de valeur à une structure
Plus de sujets relatifs à : insertion dans structure


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)