c - 释放包含 void * 的结构

标签 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 结构的指针转换为 void *

最佳答案

在这种情况下,强制转换是无用的,在许多情况下,c 会自动提升任何指向 void * 的指针(例如,不适用于 stdarg):

free((void*)node);

相当于:

free(node);

关于c - 释放包含 void * 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803633/

相关文章:

c - ruby 内联 : Error: too few arguments to function

c - 在 C 中释放二维数组的内存

linux - 替换进程中的物理页时触发 BUG 断言

android - ApplicationInfo LoadLabel 增加我的服务的内存消耗(android)

c - GLib 将 GString 从 UTF-8 转换为 UTF-16/32 可能吗?

c - 为什么这段代码可以改变常量整数?

c - 为什么修改 *int_one 处的内存不会改变 *int_two 处的内存值?

tomcat - 增加Tomcat内存设置

c++ - 如何在可能使用 placement new 的同时创建数组

c++ - 如何删除指向动态分配对象的智能指针?