我在C中有一个链接列表,我需要通过请求销毁并保留内存分配
这是代码:
有人可以向我解释我需要使用参数dealloc添加什么?
/** Destroy and de-allocate the memory hold by a list
\param list - a pointer to an existing list
\param dealloc flag that indicates whether stored data should also be de-allocated
*/
void dbllist_destroy(dbllist_t *list,dbllist_destroy_t dealloc)
{
dbllist_node_t *current = (dbllist_node_t *)malloc(sizeof(dbllist_node_t));
dbllist_node_t *current = (dbllist_node_t *)malloc(sizeof(dbllist_node_t));
if(current == NULL || temp == NULL)
return -1;
current = dbllist_tail(list);
while (current != NULL)
{
temp = dbllist_prev(current);
free(current);
current = temp;
dbllist_size(list)--;
}
free(current);
free(temp);
free(list);
return 0;
}
typedef enum { DBLLIST_LEAVE_DATA = 0, DBLLIST_FREE_DATA } dbllist_destroy_t;
答案 0 :(得分:0)
所以,我可以看到剩下的问题:
dbllist_size(list)--
毫无意义。你只是得到一个价值,然后减少它。大概你正试图减少列表的存储大小。 dbllist_size返回指向大小的指针(不太可能,但在这种情况下,您需要执行(*dbllist_size(list))--)
)。您更有可能需要调用dbllist_set_size
(如果有)或(最有可能)直接更改大小值(list->size--
或类似的东西)。但是,由于您要释放整个结构,您可以在结尾处将大小设置为0 ^ 1 free(current)
之前。可能它会像if (DBLLIST_FREE_DATA==dealloc) { free(dbllist_get_data(current));}
(再次,取决于api)free(current)
,因为此时当前必须为空。list
是否为空。temp
[^ 1]:如果你需要破坏线程安全,那么可能想要在释放每个项目后设置大小;在这种情况下,您还需要在for循环内部放置一个互斥锁。此外,由于这可能是双链表,您还需要更新上一个/下一个指针。可能这对你来说太过分了。