Hallo zusammen,
ich möchte Elemente aus einer Liste löschen. Die Liste sieht so aus:
(Soll übrigens C und nicht C++ sein)
Ich will damit ein Menü mit eventuellen Untermenüs aufbauen, daher die list in der liste.
Löschen sieht so aus:
Allerdings wird beim free (bei beiden) immer eine Speicherschutzverletzung geworfen und ich komme nicht wirklich darauf, wieso?
Was meint ihr?
EDIT: Wenn ich das free auskommentiere, dann ist das Element auch weg, daher nehme ich an, dass der Algo stimmen sollte. Kann es sein, dass Windows7 beim free streikt?
ich möchte Elemente aus einer Liste löschen. Die Liste sieht so aus:
(Soll übrigens C und nicht C++ sein)
C:
struct node
{
struct node *prev;
struct node *next;
char *title;
struct node *list;
};
Ich will damit ein Menü mit eventuellen Untermenüs aufbauen, daher die list in der liste.
Löschen sieht so aus:
C:
void deleteNode(struct node *list, struct node *node)
{
struct node *it = list;
while (it->next != NULL)
{
if (it == node)
{
if (it == list)
{
if (it->next != NULL)
it->next->prev = NULL;
list = it->next;
free(it);
break;
}
else if (it == node)
{
it->prev->next = it->next;
it->next->prev = it->prev;
free(it);
break;
}
}
it = it->next;
}
}
Allerdings wird beim free (bei beiden) immer eine Speicherschutzverletzung geworfen und ich komme nicht wirklich darauf, wieso?
Was meint ihr?
EDIT: Wenn ich das free auskommentiere, dann ist das Element auch weg, daher nehme ich an, dass der Algo stimmen sollte. Kann es sein, dass Windows7 beim free streikt?
Zuletzt bearbeitet: