Bonjour à tous,

Etant en train de tenter de comprendre les notions de "liste chaînée" (il faut bien un début à tout ) et malgré quelques lacunes, j'arrive un peu à sortir la tête hors de l'eau. J'ai pour l'instant créer une fonction permettant d'ajouter un élément en fin de liste sans trop de soucis. Par contre, j'essaie désespérément de créer une fonction permettant de supprimer un élément en fonction d'une variable et là, c'est le drame.

Voici donc la fonction en question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct node {
	char *key;
	char *value;
	char *option;
	struct node *p_next;
};
 
// le code étant assez sommaire ...
struct node *remove_item (struct node *p_head, char *key, char *value, char *option)
{
	struct node *p_item = p_head;
	while (p_item->p_next != NULL)
	{
                /* si la variable est dans la liste, supprime */
		if (!strcmp(p_item->key, key))
		{
			free(p_item);
			p_item = p_item->p_next;
		}
		else
		{
			p_item = p_item->p_next;
		}
	}
	return p_item;
}
Supposont que dans mon main(), j'ai ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
[...] // partie du code pas trop intéressante
 
p_head = add_item (p_head, "directory", "/root", "\0x08");
p_head = add_item (p_head, "shell", "/bin/sh", "\0x08");
p_head = add_item (p_head, "test", "0", "\0x08");
 
p_head = remove_item (p_head, "test", NULL, NULL);
Je devrais obtenir une liste avec uniquement les variables "directory", "shell" (la variable "test" étant enlevée).

Au lieu de cela, j'obtiens

# ./a.out
test = 0
#
Ce qui correspond à la dernière variable. Ce que je tente de faire est-il possible ? Je n'ai pas l'impression d'avoir un algorithme complètement nul par contre je ne vois pas où peut se poser le problème.

Des idées sur le(s) problèmes(s) ?