首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数传递到atexit()

将参数传递到atexit()
EN

Stack Overflow用户
提问于 2017-05-21 13:43:31
回答 4查看 4.2K关注 0票数 4

在我的程序中,我使用了一个静态变量(没有其他方法),问题是它需要在退出时被释放。

我怎样才能做到这一点而不必声明这个变量为全局变量呢?

我在考虑atexit函数,但它似乎无法进行论证。难道就没有办法把我的变量传递出去吗?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-21 13:57:39

我假设“全局”指的是不想使用带有文件范围的变量,而“静态”指的是函数中的静态局部变量,而不是该词的其他19种含义之一。您没有给出足够的上下文,因为无疑有一个更清晰的解决方案,但是您可以在声明该变量的函数中添加一个参数,并执行如下操作:

代码语言:javascript
复制
void
foo(int exit_flag, ...)
{ 
        static int * x = NULL
        if( exit_flag ){
                /* cleanup */
                free(x);
                return;
        }
        ...
}

始终使用exit_flag == 0调用foo,除非在设置exit_flag时在退出处理程序中。

票数 1
EN

Stack Overflow用户

发布于 2017-05-21 13:48:56

不确定它是否满足您的要求,但我会将静态变量设置为文件范围静态的,在一个源文件中关闭,如下所示:

代码语言:javascript
复制
static char *my_static_variable = NULL;

static void my_cleanup_function()
{
    free(my_static_variable);
}

void my_initialization_function()
{
    my_static_variable = malloc(10);
    atexit(my_cleanup_function);
}

也就是说,my_static_variablemy_cleanup_function只在这一个源文件中可见;它们不是程序范围的全局文件。

不过,顺便提一下,在退出时通常不需要释放malloc‘’ed内存。实际上,当操作系统释放进程所使用的内存时,您分配的任何内容都会自动释放。

票数 5
EN

Stack Overflow用户

发布于 2018-04-04 20:17:31

我认为解决这个问题的一个更好的方法是使用on_exit函数而不是atexit函数。

请参阅相关手册页- exit.3.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44097610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档