Il semblerait bien que tout marche à l'éxécution jusqu'à l'affichage de la fonction !
Ma fonction d'affichage :
void afficher_liste(Liste* liste) {
if (liste == NULL) exit(EXIT_FAILURE);
Element *pointeur = liste->premier;
while (pointeur != NULL) {
printf("%d->",pointeur->nombre);
pointeur = pointeur->suivant;
}
printf("NULL\n");
}
Si la liste renvoie un pointeur égalant à NULL, elle devrait renvoyer "NULL\n" mais au lieu de ça j'ai une boucle infini se perdant dans la mémoire ( littéralement ) :
J'ai dû faire une erreur tout bête mais je ne vois pas, merci d'avance pour votre aide !
pourrais tu donner un code complet ou apparaît ton problème ?
comme l'a dis edgarjacobs tu free pas listeè->premier.
maintenant ça fonctionne :
#include <stdio.h>
#include <stdlib.h>
typedef struct _Element
{
int nb;
struct _Element *suivant;
}Element;
typedef struct {
Element *premier;
}Liste;
void destroy(Liste *liste)
{
Element *elem = liste->premier;
liste->premier = NULL;
while(elem != NULL)
{
Element *aSupprimer = elem;
elem = elem->suivant;
free ( aSupprimer );
aSupprimer = NULL;
}
}
void afficher_liste(Liste* liste)
{
if (liste == NULL)
exit(1);
Element *pointeur = liste->premier;
while (pointeur != NULL)
{
printf("%d->",pointeur->nb);
pointeur = pointeur->suivant;
}
printf("NULL\n");
}
int main ( void )
{
Liste liste;
Element *a, *b , *c;
a = malloc ( sizeof ( Element ) );
b = malloc ( sizeof ( Element ) );
c = malloc ( sizeof ( Element ) );
a->nb = 1;
a->suivant = b;
b->nb = 2;
b->suivant = c;
c->nb = 3;
c->suivant = NULL;
liste.premier = a;
afficher_liste ( &liste );
destroy ( &liste );
afficher_liste ( &liste );
return ( 0 );
}
valgrind ./a.out
==81217== Memcheck, a memory error detector
==81217== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==81217== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==81217== Command: ./a.out
==81217==
1->2->3->NULL
0x5204040
(nil)
NULL
==81217==
==81217== HEAP SUMMARY:
==81217== in use at exit: 0 bytes in 0 blocks
==81217== total heap usage: 4 allocs, 4 frees, 1,072 bytes allocated
==81217==
==81217== All heap blocks were freed -- no leaks are possible
==81217==
==81217== For counts of detected and suppressed errors, rerun with: -v
==81217== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
- Edité par ox223252 13 juillet 2018 à 15:36:06
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub