diff --git a/demo/demo.c b/demo/demo.c index cf1b127..d353d61 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -58,12 +58,12 @@ int main() printf("----- unicstl demo -----\n"); // while (1) { - // demo_list(); + demo_list(); // demo_stack(); // demo_deque(); // demo_queue(); // demo_tree(); - demo_heap(); + // demo_heap(); } printf("----- unicstl ok -----\n"); diff --git a/demo/demo_heap.c b/demo/demo_heap.c index 6cbd8c3..02cae81 100644 --- a/demo/demo_heap.c +++ b/demo/demo_heap.c @@ -78,7 +78,7 @@ void demo_heap_num(void) { printf("----- empty -----\n"); } - heap_free(heap); + heap_free(&heap); } static void demo_heap_struct(void) @@ -144,7 +144,7 @@ static void demo_heap_struct(void) { printf("----- empty -----\n"); } - heap_free(heap); + heap_free(&heap); } void demo_heap(void) diff --git a/demo/demo_queue.c b/demo/demo_queue.c index bc65a26..68c2bd6 100644 --- a/demo/demo_queue.c +++ b/demo/demo_queue.c @@ -292,7 +292,7 @@ static void demo_queue_struct(void) queue->print(queue); printf("\n"); - queue_free(queue); + queue_free(&queue); } diff --git a/demo/demo_tree.c b/demo/demo_tree.c index 9002cf2..7352716 100644 --- a/demo/demo_tree.c +++ b/demo/demo_tree.c @@ -141,7 +141,7 @@ void demo_avltree_num(void) printf("----- empty -----\n"); } - tree_free(tree); + tree_free(&tree); } static bool tree_rb_check_color(struct _tree *self, struct _tree_node* root, int black_num, int black_num_expected) @@ -326,7 +326,7 @@ void demo_rbtree_num(void) printf("----- empty -----\n"); } #endif - tree_free(tree); + tree_free(&tree); } /** @@ -458,7 +458,7 @@ void demo_rbtree_struct(void) printf("----- empty -----\n"); } #endif - tree_free(tree); + tree_free(&tree); } void demo_tree(void) diff --git a/include/deque.h b/include/deque.h index 29a23b6..1533d4e 100644 --- a/include/deque.h +++ b/include/deque.h @@ -69,6 +69,6 @@ typedef struct _deque* deque_t; bool deque_init(struct _deque* self, uint32_t obj_size); deque_t deque_new(void); -void deque_free(deque_t deque); +void deque_free(deque_t* deque); #endif diff --git a/include/heap.h b/include/heap.h index 4b616e1..1196106 100644 --- a/include/heap.h +++ b/include/heap.h @@ -59,6 +59,6 @@ typedef struct _heap* heap_t; bool heap_init2(struct _heap* self, uint32_t obj_size, uint32_t capacity); heap_t heap_new(void); -void heap_free(heap_t heap); +void heap_free(heap_t* heap); #endif // _HEAP_H_ diff --git a/include/list.h b/include/list.h index 26e4a54..db10f9f 100644 --- a/include/list.h +++ b/include/list.h @@ -62,6 +62,6 @@ typedef struct _list* list_t; bool list_init2(struct _list* self, uint32_t obj_size, uint32_t capacity); list_t list_new(void); -void list_free(list_t list); +void list_free(list_t* list); #endif // _LIST_H_ diff --git a/include/queue.h b/include/queue.h index 010e2b1..689c305 100644 --- a/include/queue.h +++ b/include/queue.h @@ -58,6 +58,6 @@ bool queue_init(struct _queue * queue, uint32_t obj_size); bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity); queue_t queue_new(void); -void queue_free(queue_t queue); +void queue_free(queue_t* queue); #endif // _QUEUE_H_ diff --git a/include/tree.h b/include/tree.h index 3a84075..92547a5 100644 --- a/include/tree.h +++ b/include/tree.h @@ -93,7 +93,7 @@ bool tree_avl_init(struct _tree *self, uint32_t obj_size); bool tree_rb_init(struct _tree *self, uint32_t obj_size); tree_t tree_new(void); -void tree_free(tree_t tree); +void tree_free(tree_t* tree); #endif // _TREE_H_ diff --git a/src/deque.c b/src/deque.c index a51bea9..c0c13a3 100644 --- a/src/deque.c +++ b/src/deque.c @@ -333,11 +333,12 @@ deque_t deque_new(void) return (struct _deque*)malloc(sizeof(struct _deque)); } -void deque_free(deque_t deque) +void deque_free(deque_t *deque) { - if(deque != NULL) + if(*deque != NULL) { - deque->destory(deque); - free(deque); + (*deque)->destory(*deque); + free(*deque); } + *deque = NULL; } diff --git a/src/heap.c b/src/heap.c index ec84537..8bf2f06 100644 --- a/src/heap.c +++ b/src/heap.c @@ -276,11 +276,12 @@ heap_t heap_new(void) return (struct _heap*)malloc(sizeof(struct _heap)); } -void heap_free(heap_t heap) +void heap_free(heap_t* heap) { - if(heap) + if(*heap != NULL) { - heap->destory(heap); - free(heap); + (*heap)->destory(*heap); + free(*heap); } + heap = NULL; } diff --git a/src/list.c b/src/list.c index 5daed1f..93ce908 100644 --- a/src/list.c +++ b/src/list.c @@ -220,11 +220,12 @@ list_t list_new(void) return (struct _list*)malloc(sizeof(struct _list)); } -void list_free(list_t list) +void list_free(list_t* list) { - if(list != NULL) + if(*list != NULL) { - list->destory(list); - free(list); + (*list)->destory(*list); + free(*list); } + list = NULL; } diff --git a/src/queue.c b/src/queue.c index 04709c3..b92c6a6 100644 --- a/src/queue.c +++ b/src/queue.c @@ -340,11 +340,12 @@ queue_t queue_new(void) return (struct _queue *)malloc(sizeof(struct _queue)); } -void queue_free(queue_t queue) +void queue_free(queue_t* queue) { - if(queue != NULL) + if(*queue != NULL) { - queue->destory(queue); - free(queue); + (*queue)->destory(*queue); + free(*queue); } + queue = NULL; } diff --git a/src/tree.c b/src/tree.c index c3234a7..bdc4296 100644 --- a/src/tree.c +++ b/src/tree.c @@ -177,7 +177,7 @@ int32_t tree_height(struct _tree* self, struct _tree_node* root) count_cur_level++; } } - queue_free(queue); + queue_free(&queue); return height; #endif } @@ -587,7 +587,7 @@ bool tree_clear(struct _tree* self) } tree_node_free(node); } - queue_free(queue); + queue_free(&queue); self->_root = NULL; self->_size = 0; return true; @@ -928,7 +928,7 @@ void tree_breadth(struct _tree* self, struct _tree_node* root) self->print_obj(node->obj); } } - queue_free(queue); + queue_free(&queue); } static struct _tree_node* tree_find_min(struct _tree* self, struct _tree_node* root) @@ -1532,12 +1532,12 @@ tree_t tree_new(void) return (struct _tree*)malloc(sizeof(struct _tree)); } -void tree_free(tree_t tree) +void tree_free(tree_t* tree) { - if(tree != NULL) + if(*tree != NULL) { - tree->destory(tree); - free(tree); + (*tree)->destory(*tree); + free(*tree); } + tree = NULL; } - \ No newline at end of file