我知道atexit()接受這種型別的函式指標void (*function)(void)。我想要做的是,只要 porgam 存在,它就會運行一個函式來釋放所有記憶體。所以我想atexit()改用這個函式指標
void (*function)(struct Node)。有沒有辦法解決這個問題,或者類似的東西可以讓我做到這一點。
uj5u.com熱心網友回復:
您可以為清理功能添加自己的暫存器:
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);
}
uj5u.com熱心網友回復:
您傳遞給的函式atexit 必須具有匹配的函式簽名。
如果此函式的作業是釋放一些記憶體,則必須將指向該記憶體的指標作為檔案范圍變數提供。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364038.html
