Insertion structure
fallout
-
angebrune8 Messages postés 22 Statut Membre -
angebrune8 Messages postés 22 Statut Membre -
Bonjour,j'essaie de faire une insertion dans une structure mais ca ne marche pas comme je le souhaite:
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?
int main(void){
srand((int)time(NULL));
struct objets placard =creer_struct();
for(int i =0;i<5;i++) {
int var=rand()%100;
inserer_structure(placard,var);
}
return EXIT_SUCCESS;
}
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?
A voir également:
- Insertion structure
- Touche insertion clavier - Guide
- Insertion video powerpoint - Guide
- Insertion filigrane word - Guide
- Insertion sommaire word - Guide
- Insertion liste déroulante excel - Guide
8 réponses
Salut,
A priori, tu n'envoies pas l'adresse de ta structure dans la fonction inserer_structure, ce qui explique peut-être ton problème.
Pourrais-tu poster le code de la fonction inserer_structure ? Ainsi que la définition de la structure ?
Cdlt
A priori, tu n'envoies pas l'adresse de ta structure dans la fonction inserer_structure, ce qui explique peut-être ton problème.
Pourrais-tu poster le code de la fonction inserer_structure ? Ainsi que la définition de la structure ?
Cdlt
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?
struct b_arbre_entier{
b_arbre deleg;
};
struct b_arbre{
noeud racine;
int ordre;
int(*compare)(const void *,const void *);
void(*affiche)(const void*,const void*,int c);
size_t taille;
};
void
inserer_b_arbre(b_arbre self,void* e)
{
noeud r=self->racine;
if(getnb_cles(r)==2*self->ordre-1)
{
noeud s=creer_noeud(self->ordre,self->taille);
self->racine =s;
modifier_feuille(s,false);
modifier_nb_cles(s,0);
noeud_allouer_fils(s,2*self->ordre*(sizeof(getfils(self->racine))));
modifier_fils_i(s,r,0);
partager_enfant(self,s,0,r);
inserer_b_arbre_incomplet(self,s,e);
}
else
inserer_b_arbre_incomplet(self,r,e);
}
insere_b_arbre_entier(b,18)... ca marche bien ca ne viendrait pas de la variable var?
struct b_arbre_entier{
b_arbre deleg;
};
struct b_arbre{
noeud racine;
int ordre;
int(*compare)(const void *,const void *);
void(*affiche)(const void*,const void*,int c);
size_t taille;
};
void
inserer_b_arbre(b_arbre self,void* e)
{
noeud r=self->racine;
if(getnb_cles(r)==2*self->ordre-1)
{
noeud s=creer_noeud(self->ordre,self->taille);
self->racine =s;
modifier_feuille(s,false);
modifier_nb_cles(s,0);
noeud_allouer_fils(s,2*self->ordre*(sizeof(getfils(self->racine))));
modifier_fils_i(s,r,0);
partager_enfant(self,s,0,r);
inserer_b_arbre_incomplet(self,s,e);
}
else
inserer_b_arbre_incomplet(self,r,e);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
J'ai demandé la fonction inserer_structure() ;-)).
Poste le programme en entier. Elimine les parties inutiles, et n'oublie pas d'utiliser la balise "code" pour respecter l'indentation.
J'ai demandé la fonction inserer_structure() ;-)).
Poste le programme en entier. Elimine les parties inutiles, et n'oublie pas d'utiliser la balise "code" pour respecter l'indentation.
struct b_arbre_entier{
b_arbre deleg;
};
struct b_arbre{
noeud racine;
int ordre;
int(*compare)(const void *,const void *);
void(*affiche)(const void*,const void*,int c);
size_t taille;
};
void
inserer_b_arbre_entier(b_arbre_entier self,int elem)
{
int * entier = malloc(sizeof *entier);
if (entier) {
entier[0] = elem;
inserer_b_arbre_incomplet(self->deleg, entier);
}
else fprintf(stderr, "entrer entier.\n" );
}
void
inserer_b_arbre_incomplet(b_arbre self,noeud x, void* e)
{
if(getnb_cles(x)==0){ // si la structure est vide ono insere directement
modifier_cles_i(x,e,0);
modifier_nb_cles(x,1);
}
else{
int i=getnb_cles(x)-1;
if(getfeuille(x))
{
while(i>=0 && self->compare(*(getcles(x)+i),e)>0)
i--;
memmove((getcles(x)+i+2),(getcles(x)+i+1),(getnb_cles(x)-i-1)*self->taille);//on decale pour inserer
modifier_cles_i(x,e,i+1);
modifier_nb_cles(x,getnb_cles(x)+1);// on affecte l'element à la structure
}
voilà