gpt4 book ai didi

c - 你怎么能只用 POSIX 函数清理整个 POSIX 树呢?

转载 作者:太空狗 更新时间:2023-10-29 16:05:10 26 4
gpt4 key购买 nike

tsearch 填充了 POSIX 二叉树后,如何清理整棵树? GCC 提供了 tdestroy 作为扩展,但是如果你想使用 POSIX-only 函数,你该怎么做呢?

我当前的实现使用 twalk 遍历树,对于 endorderleaf 节点,调用 tdelete ,但这可以理解地显示了关于 const-correctness 的警告:

static void free_tree(const void *node, const VISIT which, const int depth)
{
struct search_entry *entry;
switch (which) {
case endorder:
case leaf:
entry = *(struct search_entry **)node;
tdelete(entry->key, &node, search_entry_compare);
free(entry);
}
}

符合 POSIX 标准的应用程序的预期方法是什么?

最佳答案

tsearch() 的 POSIX 描述family of functions 有一个信息丰富的Examples部分,它展示了标准认为你可以如何删除树的所有元素(作为一个更大的、完整的如何使用这些函数的示例的一部分):

/* Delete all nodes in the tree */
while (root != NULL) {
elementptr = *(struct element **)root;
printf("deleting node: string = %s, count = %d\n",
elementptr->string,
elementptr->count);
tdelete((void *)elementptr, &root, delete_root);
free(elementptr);
}

基本上,它会使用 tdelete() 重复删除根节点,直到不再有要删除的根节点为止。还显示了 delete_root() 函数 — 它是一个空操作,成功返回 0。

我们可以在对 tdelete() 的调用中讨论转换的优点(或缺点)。

关于c - 你怎么能只用 POSIX 函数清理整个 POSIX 树呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com