Probleme dans la procedure depilment C

Résolu/Fermé
ghostdz - Modifié par ghostdz le 6/03/2012 à 20:05
 ghostdz - 6 mars 2012 à 21:01
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
6 mars 2012 à 20:05
Pourrais-tu donner la définition de la structure stack et l'initialisation de la variable d ?
0
structure

typedef struct pile
{
int data;
struct pile *suiv;
}stack;
l'initialisation dans le pgm principale
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
6 mars 2012 à 20:08
Pourrais-tu donner la définition [...] ET l'initialisation de la variable d ? Malloc ...
0
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
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
Modifié par fiddy le 6/03/2012 à 20:57
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
merci bcp ça marche
0