c - 我是 "have to"free() 静态动态分配指针吗?

标签 c malloc free dynamic-memory-allocation

我有一个带有 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/

相关文章:

接受输入的 Char 数组将剩余数据放入连续的 char 数组

使用 strtol() 将 IP 地址从十六进制转换为十进制

c - malloc() 在 free() 之后重用内存位置,导致碎片化(?)

c - 在 C 中释放二维数组的内存时出现异常警告

c - 使用套接字时如何获得下载速度?

c - 修复签名和未签名警告之间比较的解决方案

C malloc 用例 - 重新分配与预计算

c - 没有将分配内存的实际大小获取到指针

C:释放每个 malloc 还是只释放主要的?

调用 free 导致程序抛出异常