Liste chainée que j'arrive pas à parcourir [resolu] [C] - C++ - Programmation
Marsh Posté le 17-12-2002 à 18:07:58
(au moins) 2 erreurs :
1/
ma_pile=(pile)malloc(sizeof(struct_pile));
printf("Creation de la pile\n" );
ma_pile=NULL;
alloc d'une pile et mise à NULL du pointeur, memory leak -> MAL
2/
return nv_pile;
tu retournes le dernier élément alloué que tu considères ensuite dans ton code comme la liste en elle-même. tu n'afficheras donc que le dernier élément après tes empilages.
Marsh Posté le 17-12-2002 à 18:26:45
oui, en effet !!
mais bon maintenant, j'ai une erreur dans ma boucle d'insertion
à ce niveau : avant=avant->suivant (cf edit)
Marsh Posté le 17-12-2002 à 18:32:03
quel genre d'erreur, plantage je suppose ? un malloc n'initialise pas les données qu'il alloue. le pointeur suivant d'une nouvelle structure sera donc n'importe quoi.
Marsh Posté le 17-12-2002 à 19:36:56
Merci, le problème est résolu !!
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
struct struct_pile
{
char caractere;
struct struct_pile *suivant;
};
typedef struct struct_pile *pile;
pile empiler(pile une_pile, char elem)
{
pile nouveau, avant, actuel;
nouveau = (pile) malloc(sizeof(struct_pile));
nouveau->caractere = elem;
if (une_pile == NULL)
{
printf("cas : pile null\n" );
nouveau->suivant = NULL;
une_pile = nouveau;
}
else
{
printf("cas : pile avec au moins 1 elem\n" );
avant = une_pile;
actuel = une_pile->suivant;
while (actuel != NULL)
{
avant = actuel;
actuel = actuel->suivant;
}
avant->suivant = nouveau;
nouveau->suivant = actuel;
}
return une_pile;
}
//Programme principal
main()
{
pile ma_pile,q;
ma_pile=(pile)malloc(sizeof(struct_pile));
printf("Creation de la pile\n" );
ma_pile=NULL;
printf("Empilage 1\n" );
ma_pile=empiler(ma_pile,'a';
printf("Empilage 2\n" );
ma_pile=empiler(ma_pile,'b';
printf("Empilage 3\n" );
ma_pile=empiler(ma_pile,'1';
printf("Empilage 4\n" );
ma_pile=empiler(ma_pile,'f';
printf("Affichage\n" );
q=ma_pile;
while (q!=NULL)
{
printf("...........\n" );
printf("pile : %c\n",q->caractere);
q=q->suivant;
}
}
Marsh Posté le 17-12-2002 à 19:46:25
nikko a écrit : ma_pile=(pile)malloc(sizeof(struct_pile)); |
Marsh Posté le 17-12-2002 à 17:58:15
Bonjour,
j'ai crée une liste chainéee, j'insère 4 élements dedans, et quand je veux parcourir ma liste, je ne vois que le dernier...
pkoi ??
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
struct struct_pile
{
char caractere;
struct struct_pile *suivant;
};
typedef struct struct_pile *pile;
pile empiler(pile une_pile, char elem)
{
pile nv_pile, avant;
nv_pile=(pile)malloc(sizeof(struct_pile));
if (une_pile==NULL)
{
nv_pile->caractere=elem;
nv_pile->suivant=NULL;
}
else
{
avant = une_pile;
printf ("cas de la pile\n" );
while (avant->suivant != NULL)
{
printf("boucle\n" );
avant = avant->suivant;
}
nv_pile->caractere=elem;
nv_pile->suivant=NULL;
printf("fin de boucle\n" );
avant->suivant = nv_pile;
}
return une_pile;
}
//Programme principal
main()
{
pile ma_pile,q;
ma_pile=(pile)malloc(sizeof(struct_pile));
printf("Creation de la pile\n" );
//ma_pile=NULL;
printf("Empilage 1\n" );
ma_pile=empiler(ma_pile,'a';
printf("Empilage 2\n" );
ma_pile=empiler(ma_pile,'b';
printf("Empilage 3\n" );
ma_pile=empiler(ma_pile,'1';
printf("Empilage 4\n" );
ma_pile=empiler(ma_pile,'f';
printf("Affichage\n" );
q=ma_pile;
while (q!=NULL)
{
printf("...........\n" );
printf("pile : %c\n",q->caractere);
q=q->suivant;
}
}
Par avance merci des vos réponses...
Message édité par nikko le 17-12-2002 à 19:35:47