c语言 - 我是否"have to" free() 静态动态分配的指针?



我有一个for循环的函数,在循环内部(取决于输入)使用malloc()初始化一次(第一次)某些变量。

这些变量是这样声明的:

static double *vector;

然后我用 分配内存
malloc(size*sizeof(double));

问题是:

是否必须在被调用函数内部的最后一次循环迭代中释放这些变量?

更新:也许我对某些人解释错了。问题是被调用函数(func_A)根据主函数的输入为它使用的某些向量分配内存。然后,这个func_A在main函数的循环中被调用几次。这就是为什么我将变量定义为静态的原因,这样就不会在每次调用func_A时都定义它们(出于时间消耗问题),因为维度在整个运行过程中不会改变。这些变量是静态的,但不是全局的,所以我不能把它们从主目录中解放出来(对吧?)

您应该始终平衡mallocfree的调用。

在您的情况下,当您知道您不再需要vector时,您可以调用它。

如果这是不实际的,那么你总是可以调用atexit;传递给它一个指向合适函数的指针,该函数将free内存。见http://www.tutorialspoint.com/c_standard_library/c_function_atexit.htm

尽管您通常可以依赖操作系统来为您清理程序终止,但依赖它是相当粗糙的。

当数据不再使用时,每个malloc调用都需要有相应的free调用

你需要释放指针。作为一个经验法则——你用malloc/new分配的所有东西都在堆上,需要被释放/删除——其他所有东西都在堆栈上,并且不

注。如果您只使用诸如java/go/python之类的垃圾收集语言,则不需要了解这些

似乎向量只分配一次,然后在程序的生命周期内使用。向量存储在静态变量中。在终止程序之前,最好先释放vector,但终止程序也会为您做这些。

听起来,在程序的生命周期内,该函数似乎没有准备好处理不同(特别是:较大)的向量大小。

我是否必须在被调用函数内部的最后一次循环迭代中释放这些变量?

,但你不需要

当你不再需要内存分配器函数分配的内存时,你只需要 free()

使用malloc()和family分配内存的主要目的之一是克服局部变量范围的限制(从函数返回的局部变量的地址是非法的),所以你不必必须 free()内存"在被调用的函数内部"。您可以很好地将指针(由malloc()返回)返回给调用者,对该指针(内存)执行一些其他操作,然后从子函数的调用者那里清理(free())指针。

要记住的一件事是,您需要将最初由malloc()或family返回的确切指针传递给free()

相关内容

  • 没有找到相关文章

最新更新