...
| Code Block |
|---|
/* * list points to the pre-allocated base node in the list */ void build_list(const struct int_list *list, size_t size) { size_t i; struct int_list *c_ptr = NULL; list->payload = 42; c_ptr = list; for (i=0; i < size; i++) { struct int_list *temp=malloc(sizeof(struct int_list)); temp->payload = c_ptr->payload+1; c_ptr->next = temp; c_ptr = c_ptr->next; free(temp); /* error */ } c_ptr->next = NULL; } |
Compliant Solution 1
...
| Code Block |
|---|
struct int_list {
struct int_list *next;
int payload;
};
build_list(const struct int_list *list) {
int i;
struct int_list *list = malloc(sizeof(struct int_list));
struct int_list *c_ptr = NULL;
struct int_list *temp = NULL;
list->payload = 42;
c_ptr = list;
for (i=0; i < 10; i++) {
temp = malloc(sizeof(struct int_list));
temp->payload = c_ptr->payload+1;
c_ptr->next = temp;
c_ptr = c_ptr->next;
}
temp = NULL;
c_ptr->next = NULL;
print_list(list);
}
|
References
VU#390044, http://www.kb.cert.org/vuls/id/390044