j'ai creer une structure pile de cette forme:
Code:typedef struct FILO FILO; typedef FILO* Filo; struct FILO { double cont[9]; Filo next; };
Avec les fonctions qui vont avec:
Code:Filo allocP(){ Filo p; if((p=(Filo)malloc(sizeof(FILO)))==NULL) { fprintf(stderr,"Erreur d'allocation dans allocP\n"); exit(-1); } return p; } void empile(Filo* p_pile, double* donnee) { int i; Filo p_nouveau = allocP(); if (p_nouveau != NULL) { for(i=0;i<9;i++) { (p_nouveau->cont)[i]=donnee[i]; } p_nouveau->next = *p_pile; *p_pile = p_nouveau; } } void depile(Filo* p_pile) { if (p_pile != NULL) { Filo temporaire = (*p_pile)->next; free(*p_pile), *p_pile = NULL; *p_pile = temporaire; } }
Cependant quand je teste mes fonctions ça ne fonctionne pas:
En effet, avant la modification le pointeur est a NIL ce qui est normal, mais après modif il est encore à NIL?????Code:Filo modif(Filo pile){ double mom1[9]={0.,1.,2.,3.,4.,5.,6.,7.,8.}; double mom2[9]={8.,7.,6.,5.,4.,3.,2.,1.,0.}; empile(&pile,mom1); empile(&pile,mom2); return pile; } void main(){ Filo pile=NULL; fprintf(stderr,"%p",pile); modif(pile); fprintf(stderr,"%p",pile); depile(&pile); depile(&pile); }
Evidemment, par la suite les fonction dépile bug car la pile est vide. Et pourtant selon valgrind il y a bien eu 2 allocations, mais dans ce cas pourquoi la pile n'est pas modifiée. Je comprends pas.
Aidez moi, svp
-----