如何将不同的函数指针传递给 c 中的 atexit?

How to pass in different function pointers into atexit in c?

我理解 atexit() 接受这种类型的函数指针 void (*function)(void)。我想要做的是,只要 porgam 存在,它就会运行一个函数来释放所有内存。所以我希望 atexit() 接受这个函数指针 void (*function)(struct Node)。有没有办法解决这个问题,或者类似的东西可以让我做到这一点。

您传递给 atexit 的函数 必须 具有匹配的函数签名。

如果此函数的工作是释放一些内存,则指向该内存的指针必须作为文件范围变量可用。

您可以为清理函数添加自己的寄存器:

typedef void atexit_f(void*);
void my_atexit(atexit_f* callback, void *data);

寄存器将保存在全局变量(即链表)中。 寄存器将在使用 atexit().

注册的清理函数中清理
struct cleanup_node {
   atexit_f *cb;
   void *data;
   struct cleanup_node *next;
};

static struct cleanup_node *head;

void my_atexit_cleanup(void) {
  for (struct cleanup_node *node = head; node; node = node->next) {
     node->cb(node->data);
  }
  // free nodes itself
}

...

int main() {
  atexit(my_atexit_cleanup);
  ...
  my_atexit(some_function, some_data);
}