J'essaye d'implémenter une liste chaînée en C. Voici ma définition d'une structure de noeud, suivie d'une fonction pour ajouter un noeud à la fin de la liste liée.C- Essayer d'ajouter un noeud à la fin d'une liste chaînée provoque un plantage
struct Node{
char *name;
struct Node *next;
};
typedef struct Node Node;
void addNode(Node *head, char n[100]){
if(head->next == NULL){
Node new;
new.name = n;
new.next = NULL;
head->next = &new;
}
else{
addNode(head->next, n);
}
}
Je peux créer un nœud de tête et passer un pointeur pour dans la fonction addNode très bien d'ajouter un deuxième noeud à la liste chaînée. (Il vaut également la peine de mentionner que lorsque je crée un noeud head, je place son pointeur "next" sur NULL pour représenter la fin de la liste chaînée) Le problème semble être avec l'appel récursif à addNode dans la branche else de la fonction addNode, comme mon programme fonctionne sans s'écraser quand je le commente. Pourquoi est-ce que mon programme plante, et comment puis-je le réparer?
Vous utilisez une variable locale dans 'addNode'. Il sort de la portée lorsque vous revenez de la fonction. Ainsi, la prochaine fois que vous appelez la fonction, cela peut provoquer un crash. Et plus loin, vous devez allouer de la mémoire séparée pour 'name' et utiliser strcpy pour copier' n' à 'name' – Karthick
' Node new; -> Node * new = malloc (sizeof * new); '(changer d'autres affectations en conséquence), aussi vérifier si' head' lui-même est 'NULL'. –