我看到这段实现队列的代码
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 结构的指针转换为 void *
?
最佳答案
在这种情况下,强制转换是无用的,在许多情况下,c 会自动提升任何指向 void *
的指针(例如,不适用于 stdarg):
free((void*)node);
相当于:
free(node);
关于c - 释放包含 void * 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803633/