释放包含void *的结构

时间:2017-12-13 23:25:01

标签: c memory memory-management

我遇到了实现队列的代码

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 *

2 个答案:

答案 0 :(得分:1)

在这种情况下,强制转换无用,c在很多上下文中自动提升指向void *的指针(不是stdarg例如):

free((void*)node);

相当于:

free(node);

答案 1 :(得分:1)

你向void*施放是无偿的,这是完全正确的。因为它也没有为其他程序员澄清任何东西,它也不应该存在。

当然,这两个例子的情况都是如此。