Bonjour,
J'ai rencontré un problème d'allocation mémoire lors de l'implémentation de la liste simplement chaînée.
J'ai résolu le problème en utilisant l'allocation dynamique (avec malloc) au lieu de l'allocation statique (lors de la déclaration des variables).
Voici la définition des types et une partie des opérations disponibles dessus :
Version non fonctionnelle : allocation statique, appeler longueur(&l) engendre un seg fault
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { int valeur; } Element; typedef struct noeud { Element element; struct noeud * suivant; } Noeud; typedef Noeud * Liste; int longueur(const Liste * l); // renvoie la longueur de la liste l void ajouterAuDebut(Liste * l, const Element e); // ajouter l'élément e au début de la liste l
Version fonctionnelle : allocation dynamique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void ajouterAuDebut(Liste * l, const Element e) { Noeud n; n.element = e; n.suivant = *l; *l = &n; }
La fonction longueur est correcte (son corps n'est pas très intéressant mais je peux le fournir).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void ajouterAuDebut(Liste * l, const Element e) { Liste p = malloc(sizeof(Noeud)); p->element = e; p->suivant = *l; *l = p; }
Ma question : pourquoi cela ne fonctionne pas avec la version en allocation statique ? Après tout, la variable est bien allouée puis référencée par la liste.
Merci d'avance.
Partager