通过静态变量分配的内存会发生内存泄漏吗?
我得到了一组源代码,其中的情况如下:
假设我有一个源文件 (source1.c),其中包含:
static float *var;
void alloc_mem ()
{
var = (float *) malloc(N * sizeof(float));
}
void some_function (float *data)
{
// do something with var and data
}
在主函数中,我有
int main()
{
alloc_mem ();
some_function (data);
}
现在,我无法var通过调用free(var)main来释放分配给的内存,因为它不在那里的范围内。
这种情况会导致内存泄漏吗?如果我在 source1.c 中定义一个函数为
void dealloc_mem()
{
free(var);
}
并在 main 的末尾调用它,它会起作用吗?
回答
是的,从技术上讲,这确实是内存泄漏。
实际上,这通常是可以接受的,因为内存可以安全释放的唯一时间是在程序退出时,此时,内存是否被释放并不重要 - 它仍然会被返回程序终止后的操作系统。
为了迂腐,您可以free在main的末尾使用内存,但是除了从main返回之外,还有更多的方法可以终止程序,因此正确的方法是注册退出处理程序。但这可能是一种矫枉过正。
不得不提一下,从提供的代码来看,一开始为什么需要动态分配完全不清楚,所以我没有解决这部分。