mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
修改数据结构释放函数参数,以保证结构体指针被释放后能恢复到NULL
This commit is contained in:
parent
81c7854033
commit
447200a5e6
@ -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");
|
||||
|
@ -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)
|
||||
|
@ -292,7 +292,7 @@ static void demo_queue_struct(void)
|
||||
queue->print(queue);
|
||||
printf("\n");
|
||||
|
||||
queue_free(queue);
|
||||
queue_free(&queue);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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_
|
||||
|
@ -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_
|
||||
|
@ -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_
|
||||
|
@ -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_
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
16
src/tree.c
16
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user