我遇到了实现队列的代码
typedef struct Node {
void * data;
struct Node * next;
} node_t;
节点以这种方式免费
static void freeNode(node_t *node) { free((void*)node); }
为什么节点已转换为void *
?
应该只是free(node)
?
因为我正在研究另一种结构:
typedef struct TaskNode {
void (* fun)(void *);
void * arg;
struct Task * next;
} task_t;
在释放它之前,我是否应该将指向malloc&#d; d结构的指针转换为void *
?
答案 0 :(得分:1)
在这种情况下,强制转换无用,c在很多上下文中自动提升指向void *
的指针(不是stdarg例如):
free((void*)node);
相当于:
free(node);
答案 1 :(得分:1)
你向void*
施放是无偿的,这是完全正确的。因为它也没有为其他程序员澄清任何东西,它也不应该存在。
当然,这两个例子的情况都是如此。