c - 如何在 c 编程中删除在以下结构中具有成员函数的结构?
问题描述
我能够创建下面的所有功能并执行所有操作,但我无法删除这棵树,所以请有人帮我如何删除这种类型的结构
typedef struct Tree
{
Node *root;
Data *(*insert)(struct Tree *, Data);
Data *(*search)(struct Tree *bst, Data value);
void (*sort)(struct Tree *, Data *);
int (*compare)(struct Tree *t, struct Tree *copy);
struct Tree * (*clone)(struct Tree *t);
void (*delete)(struct Tree * bst);
void (*removeData)(struct Tree * bst, Data value);
}Tree;
树实例如下
Tree *newTree()
{
Tree *bsttemp = (Tree *)malloc(sizeof(Tree));
bsttemp->root = NULL;
bsttemp->insert = &insert;
bsttemp->search = &search;
bsttemp->sort = &sort;
bsttemp->compare = &compare;
bsttemp->clone = &clone;
// bsttemp->delete = &delete;
bsttemp->removeData = &removeData;
return bsttemp;
}
解决方案
看起来你试图在 C 中模拟类......
无论如何,
Tree *bsttemp = (Tree *)malloc(sizeof(Tree));
谁得到 bsttemp 指针(你的 newTree() 函数的调用者)可以简单地在那个指针上调用 free() 。
顺便说一句,不要强制转换 malloc()。这是不必要的,并且可以隐藏 C99 之前版本的 C 中的错误。
推荐阅读
- swift - Wordpress swift builder框架轮播箭头拆分
- hibernate - Hibernate插入没有主键的记录
- java - Java 10 上的 Swing 问题
- php - 如何排除两个日期范围之间的周末
- xquery - 如何在 XQuery 中尽量减少 FOR 循环的使用?
- javascript - 调整列的大小,同时从右侧为元素设置动画
- javascript - 如何防止机器人和垃圾邮件 API 请求?
- javascript - 如何使用 AsyncStorage 在 React Native 中隐藏登录屏幕
- r - R data.table:melt() 自动转换为大写字母
- mysql - 尝试选择所有内容,但不包括 ID 之间的内容不起作用