#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
在嵌套函数内部可见,什么会导致分段错误?
#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
在嵌套函数内部可见,什么会导致分段错误?
从gcc 文档:
如果您在包含函数退出后尝试通过其地址调用嵌套函数,那么一切都会崩溃。如果您尝试在包含范围级别退出后调用它,并且如果它引用了一些不再在范围内的变量,那么您可能很幸运,但冒险并不明智。但是,如果嵌套函数没有引用超出范围的任何内容,那么您应该是安全的。
atexit
main
退出后调用注册函数。