通过静态变量分配的内存会发生内存泄漏吗?

我得到了一组源代码,其中的情况如下:

假设我有一个源文件 (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返回之外,还有更多的方法可以终止程序,因此正确的方法是注册退出处理程序。但这可能是一种矫枉过正。

不得不提一下,从提供的代码来看,一开始为什么需要动态分配完全不清楚,所以我没有解决这部分。


以上是通过静态变量分配的内存会发生内存泄漏吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>