我需要使用malloc
創建事件,但我不知道它在哪裏釋放它們,我想知道 是否它允許釋放事件的回調函數內,如:libevent:是否允許釋放其回調函數中的事件,如果事件是由malloc創建的
struct event *pkt_ev = (struct event *)malloc(sizeof(struct event));
evtimer_set(&pkt_ev, timer_cb, &pkt_ev);
event_base_set(base, &pkt_ev);
event_add(&pkt_ev, timeout);
回調函數timer_cb():
timer_cb(int fd, short ev, void* arg){
.......
free(arg); // here the arg is &pkt_ev
}
我最初的想法是:回調函數timer_cb()
被調用後,libevent的意志隱含地呼叫event_del(&pkt_ev)
。但是由於我在回調中釋放了&pkt_ev
,因此在event_del(&pkt_ev)
上會出現崩潰/異常。這樣對嗎?
但是,如果event_del(&pkt_ev)
不在乎什麼內容pkt_ev
指向,它可能不是一個問題?
之外,在這個函數:
event_add(struct event *ev, struct timeval *timeout);
由ev
指向的內容應該被照顧了很多,一般應該是一個全局變量或它的壽命應涵蓋事件循環(即,當事件循環功能正在運行,它將訪問ev
指出的內容)。由超時指向的內容如何?應該由超時指向的內容覆蓋事件循環嗎?