3
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int *a = malloc(sizeof(int));

    __extension__ void clean(void)
    {
        free(a);
    }

    atexit(clean);
    return 0;
}

a在嵌套函数内部可见,什么会导致分段错误?

4

1 回答 1

3

gcc 文档

如果您在包含函数退出后尝试通过其地址调用嵌套函数,那么一切都会崩溃。如果您尝试在包含范围级别退出后调用它,并且如果它引用了一些不再在范围内的变量,那么您可能很幸运,但冒险并不明智。但是,如果嵌套函数没有引用超出范围的任何内容,那么您应该是安全的。

atexitmain退出后调用注册函数。

于 2014-07-24T12:08:26.187 回答