Probleme dans la procedure depilment C
Résolu/Fermé
A voir également:
- Probleme dans la procedure depilment C
- Procedure de taxe bara ✓ - Forum Matériel & Système
- Procédure de frigo vide - Forum PDF
- Le point d'entrée de procédure eventsetinformation est introuvable advapi32.dll - Forum Windows
- Arnaque transcash sur Leboncoin. ✓ - Forum Consommation & Internet
- Internat nourriture - Forum Loisirs / Divertissements
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
6 mars 2012 à 20:05
Pourrais-tu donner la définition de la structure stack et l'initialisation de la variable d ?
structure
typedef struct pile
{
int data;
struct pile *suiv;
}stack;
l'initialisation dans le pgm principale
typedef struct pile
{
int data;
struct pile *suiv;
}stack;
l'initialisation dans le pgm principale
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
6 mars 2012 à 20:08
Pourrais-tu donner la définition [...] ET l'initialisation de la variable d ? Malloc ...
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;
}
#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;
}
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
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.