Probleme dans la procedure depilment C

Résolu
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. Contributeur
    Pourrais-tu donner la définition de la structure stack et l'initialisation de la variable d ?
    1. structure

      typedef struct pile
      {
      int data;
      struct pile *suiv;
      }stack;
      l'initialisation dans le pgm principale
      1. Contributeur
        Pourrais-tu donner la définition [...] ET l'initialisation de la variable d ? Malloc ...
      2. 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
      3. 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;
        }
      4. Contributeur
        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.
      5. merci bcp ça marche