我有一个带有 for 循环的函数,在循环内部(并且取决于输入)某些变量使用 malloc()
初始化一次(第一次)。
这些变量声明如下:
static double *vector;
然后我使用
分配内存malloc(size*sizeof(double));
问题是:
我是否必须在被调用函数内循环的最后一次迭代中释放这些变量?
更新:也许我对某些人的解释是错误的。问题是被调用函数 (func_A) 根据主函数的输入为其使用的某些 vector 分配内存。然后,这个 func_A 在 main 中的循环中被调用了几次。这就是为什么我将变量定义为静态的,这样它们就不会在每次调用 func_A 时都被定义(出于时间消耗的考虑),因为维度在整个运行过程中不会改变。这些变量是静态的但不是全局的,所以我不能将它们从 main 中释放出来(对吧?)。
最佳答案
您应该始终在 malloc
与调用 free
之间取得平衡。
在您的情况下,当您知道不再需要 vector
时,您可以调用它。
如果那不切实际,那么您可以随时调用 atexit
;向它传递一个指向合适函数的指针,该函数将释放
内存。参见 http://www.tutorialspoint.com/c_standard_library/c_function_atexit.htm
虽然您通常可以依靠操作系统在程序终止时为您清理,但依靠它是相当粗鲁的。
关于c - 我是 "have to"free() 静态动态分配指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39385520/