diff --git a/docs/changes.md b/docs/changes.md index 1ccb2f4de..6b52d6a6f 100644 --- a/docs/changes.md +++ b/docs/changes.md @@ -2,6 +2,7 @@ 2025/04/15 * 增加mem_allocator_fixed_block,dlist/slist/tree使用该内存分配器管理内存(感谢兆坤提供补丁)。 + * 完善mem_allocator_fixed_block(感谢兆坤提供补丁)。 2025/04/14 * conf_io 支持 YAML格式。 diff --git a/src/tkc/dlist.c b/src/tkc/dlist.c index dc68e510a..29cf42593 100644 --- a/src/tkc/dlist.c +++ b/src/tkc/dlist.c @@ -30,10 +30,12 @@ static dlist_node_t* dlist_create_node(dlist_t* dlist, void* data) { if (dlist->node_allocator != NULL) { ret = mem_allocator_alloc(dlist->node_allocator, sizeof(dlist_node_t), __FUNCTION__, __LINE__); } else { - ret = TKMEM_ZALLOC(dlist_node_t); + ret = TKMEM_ALLOC(sizeof(dlist_node_t)); } return_value_if_fail(ret != NULL, NULL); + memset(ret, 0, sizeof(*ret)); + ret->data = data; return ret; diff --git a/src/tkc/mem_allocator_fixed_block.c b/src/tkc/mem_allocator_fixed_block.c index f3ed91ede..ebfcfdf58 100644 --- a/src/tkc/mem_allocator_fixed_block.c +++ b/src/tkc/mem_allocator_fixed_block.c @@ -186,10 +186,13 @@ inline static mem_allocator_fixed_block_pool_t* mem_allocator_fixed_block_pool_c mem_allocator_fixed_block_pool_t* ret = NULL; return_value_if_fail(allocator != NULL && num > 0, NULL); - ret = TKMEM_CALLOC(1, MEM_ALLOCATOR_FIXED_BLOCK_POOL_SIZE(allocator->size, num)); + ret = TKMEM_ALLOC(MEM_ALLOCATOR_FIXED_BLOCK_POOL_SIZE(allocator->size, num)); return_value_if_fail(ret != NULL, NULL); ret->num = num; + ret->used_units = NULL; + ret->unused_units = NULL; + ret->next = NULL; mem_allocator_fixed_block_pool_init(allocator, ret); diff --git a/src/tkc/slist.c b/src/tkc/slist.c index cfd8a6d76..7607f6e3e 100644 --- a/src/tkc/slist.c +++ b/src/tkc/slist.c @@ -30,10 +30,12 @@ static slist_node_t* slist_create_node(slist_t* slist, void* data) { if (slist->node_allocator != NULL) { ret = mem_allocator_alloc(slist->node_allocator, sizeof(slist_node_t), __FUNCTION__, __LINE__); } else { - ret = TKMEM_ZALLOC(slist_node_t); + ret = TKMEM_ALLOC(sizeof(slist_node_t)); } return_value_if_fail(ret != NULL, NULL); + memset(ret, 0, sizeof(*ret)); + ret->data = data; return ret; diff --git a/src/tkc/tree.c b/src/tkc/tree.c index 0c03c33bd..977f91f63 100644 --- a/src/tkc/tree.c +++ b/src/tkc/tree.c @@ -254,10 +254,12 @@ static inline tree_node_t* tree_node_create(void* data, mem_allocator_t* allocat if (allocator != NULL) { ret = mem_allocator_alloc(allocator, sizeof(tree_node_t), __FUNCTION__, __LINE__); } else { - ret = TKMEM_ZALLOC(tree_node_t); + ret = TKMEM_ALLOC(sizeof(tree_node_t)); } return_value_if_fail(ret != NULL, NULL); + memset(ret, 0, sizeof(*ret)); + ret->data = data; return ret;