Pel*_*oya 3 c malloc free dynamic-memory-allocation
我有一个带有 for 循环的函数,在循环内部(并且取决于输入)某些变量使用以下命令初始化一次(第一次)malloc()。
这些变量的声明如下:
static double *vector;
然后我使用分配内存
malloc(size*sizeof(double));
Run Code Online (Sandbox Code Playgroud)
问题是:
我是否必须在被调用函数内循环的最后一次迭代中释放这些变量?
更新:也许我对某些人的解释是错误的。问题是被调用的函数(func_A)根据主函数的输入为其使用的某些向量分配内存。然后,这个 func_A 在主循环中被多次调用。这就是为什么我将变量定义为静态变量,以便每次调用 func_A 时都不会定义它们(出于时间消耗的问题),因为尺寸在整个运行过程中不会改变。这些变量是静态的但不是全局的,所以我无法将它们从 main 中释放(对吗?)。
您应该始终平衡 amalloc与对 的调用free。
就您而言,当您知道不再需要vector.
如果这不切实际,那么您可以随时拨打电话atexit;向其传递一个指向合适函数的指针,该函数将free存储内存。请参阅http://www.tutorialspoint.com/c_standard_library/c_function_atexit.htm
虽然您通常可以依靠操作系统在程序终止时为您进行清理,但依赖它是相当粗鲁的。