Probleme dans la procedure depilment C

Résolu
ghostdz -  
 ghostdz -
Bonjour,

typedef struct pile
{
int data;
struct pile *suiv;
}stack;

void depiler (int *y,stack **d)
{
stack *tmp2;
*y= d->data;
tmp2=d;
d=d->suiv;
free (tmp2);

}

l erreur ici
*y= d->data;
d=d->suiv;

msg erreur:
error: request for member 'data' in something not a structure or union|
error: request for member 'suiv' in something not a structure or union|

comment reglè ce probleme ?

et merci d'avance

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Pourrais-tu donner la définition de la structure stack et l'initialisation de la variable d ?
    0
  2. ghostdz
     
    structure

    typedef struct pile
    {
    int data;
    struct pile *suiv;
    }stack;
    l'initialisation dans le pgm principale
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Pourrais-tu donner la définition [...] ET l'initialisation de la variable d ? Malloc ...
      0
    2. ghostdz
       
      la function empiler

      void empiler(int x,stack ** p)
      {
      tmp=(stack*)malloc(sizeof(stack));
      tmp->data=x;
      tmp->suiv=*p;
      *p=tmp;
      ça marche b1 sans initialtion p
      et malloc dans la function empiler
      0
    3. ghostdz
       
      code source complet

      #include<stdio.h>
      #include<malloc.h>



      typedef struct pile
      {
      int data;
      struct pile *suiv;
      }stack;

      int i;stack *tmp=NULL;


      void empiler(int x,stack ** p)
      {
      tmp=(stack*)malloc(sizeof(stack));
      tmp->data=x;
      tmp->suiv=*p;
      *p=tmp;

      }

      void depiler (int *y,stack **d)
      {
      stack *tmp2;
      *y= d->data;
      tmp2=d;
      d=d->suiv;
      free (tmp2);


      }

      void afficher (stack **p)
      {
      tmp=p;
      while (tmp!=NULL)
      {
      printf("%d",tmp->data);
      tmp=tmp->suiv;
      }
      }

      int main()
      {
      stack *pil=NULL;int z;
      empiler(1,&pil);
      empiler(2,&pil);
      empiler(3,&pil);
      empiler(4,&pil);
      empiler(5,&pil);
      //depiler (&z,pil);


      afficher(pil);
      //printf("/n%d",n);


      return 0;
      }
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      void depiler (int *y,stack **d)  
      {  
      stack *tmp2;  
      *y= d->data;  
      tmp2=d;  
      d=d->suiv;  
      free (tmp2);  
      

      Il faut remplacer d par (*d).
      Par exemple :
      *y=(*d)->data;
      tmp2=*d
      etc.
      Et cela devrait fonctionner.
      Sinon, tu as oublié de mettre des free.
      0
    5. ghostdz
       
      merci bcp ça marche
      0