2014-06-10 25 views
1
int main() 
    { 
     struct ev_loop *loop1 = EV_DEFAULT; 
     struct ev_loop *loop2 = ev_default_loop(0); 
     printf("%ld\n%ld\n", (long)loop1, (long)loop2); 
     return 0; 
    } 

是的,loop1等於loop2。但爲什麼他們都在堆棧中,而不是堆? 而且,也許ev_default_loop是這樣的,在libev中,爲什麼默認循環在堆棧上?

int* func() 
    { 
     int a; 
     return &a; 
    } 

但FUNC返回後,它的堆棧已被清理。那它真的很安全嗎?

回答

0

EV_DEFAULT可能是一個全局變量,ev_default_loop也會返回這個變量。所以,沒有在堆棧上。

此外,你採取了一個危險的做法,爲來電者使用返回堆棧地址。