在我的程序中,我使用了一个静态变量(没有其他方法),问题是需要在退出时释放它。
如果不将此变量声明为全局变量,该怎么做呢?
我考虑使用atexit
函数,但似乎不能接受参数。有没有什么办法可以传递我的变量呢?
谢谢。
在我的程序中,我使用了一个静态变量(没有其他方法),问题是需要在退出时释放它。
如果不将此变量声明为全局变量,该怎么做呢?
我考虑使用atexit
函数,但似乎不能接受参数。有没有什么办法可以传递我的变量呢?
谢谢。
我不确定它是否符合您的要求,但是我会将静态变量作为文件范围的静态变量,在一个源文件中关闭,类似于以下内容:
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_variable
和 my_cleanup_function
只在这个源文件中可见,它们不是全局变量。
顺便提一下,通常情况下,在程序退出时不需要释放用 malloc 分配的内存。任何你分配的内存都会被操作系统自动释放,当它释放进程所使用的内存时。
void
foo(int exit_flag, ...)
{
static int * x = NULL
if( exit_flag ){
/* cleanup */
free(x);
return;
}
...
}
static void* foo = NULL;
static void handler () {
free(foo);
}
...
atexit(handler);
如果你要退出程序,其实不需要手动释放内存。系统会自动清理。而且也不能保证你的 atexit
处理函数一定会被调用(例如 SIGKILL 信号)。
static
”,而是静态的。 - too honest for this site_exit()
不会调用使用 atexit()
注册的函数。还有其他类似的避免清理的方法。 - Jonathan Leffler
atexit
,那么您将如何传递任何内容?我嗅到一个XY问题。 - too honest for this site