...
This example from Brian Kernighan and Dennis Ritchie [Kernighan 1988] shows both the incorrect and correct techniques for deleting items from freeing the memory associated with a linked list. The incorrect solution, clearly marked as wrong in their book, is bad because In their incorrect solution, p
is freed before the p->next
is executed, so p->next
reads memory that has already been freed.
Code Block | ||||
---|---|---|---|---|
| ||||
#include <stdlib.h> struct node { int value; struct node *next; }; void funcfree_list(struct node *head) { for (struct node *p = head; p != NULL; p = p->next) { free(p); } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <stdlib.h> struct node { int value; struct node *next; }; void funcfree_list(struct node *head) { struct node *q; for (struct node *p = head; p != NULL; p = q) { q = p->next; free(p); } } |
...