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 是这样的,

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

但是 func 返回后,它的堆栈已经被清理干净了。那么它真的安全吗?

4

1 回答 1

0

EV_DEFAULT 可能是一个全局变量,并且 ev_default_loop 也返回这个变量。所以,没有在堆栈上。

此外,您采取了一种危险的做法,即为调用者使用返回堆栈地址。

于 2014-06-11T04:34:07.150 回答