修改数据结构释放函数参数,以保证结构体指针被释放后能恢复到NULL

This commit is contained in:
建峰 2024-08-28 00:23:18 +08:00
parent 81c7854033
commit 447200a5e6
14 changed files with 41 additions and 37 deletions

View File

@ -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");

View File

@ -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)

View File

@ -292,7 +292,7 @@ static void demo_queue_struct(void)
queue->print(queue);
printf("\n");
queue_free(queue);
queue_free(&queue);
}

View File

@ -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)

View File

@ -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

View File

@ -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_

View File

@ -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_

View File

@ -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_

View File

@ -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_

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}