首页 > 解决方案 > 在 C 中交换动态分配的变量时,临时变量是否需要 free?

问题描述

假设我想交换 a 和 b:

int *a = malloc(sizeof(int));
int *b = malloc(sizeof(int));
int *temp;

*a = 5;
*b = 10;
temp = a;
a = b;
b = temp;

我必须稍后释放 a 和 b,但是在这种情况下 temp 呢?

执行以下操作不会造成任何崩溃:

free(temp);
temp = NULL;

是否必须释放温度?

标签: c

解决方案


ab或中的任何一个都不temp需要被释放。命名对象由 C 实现管理。你永远不需要释放它们。

分配的内存malloc必须被释放1。这是通过将内存地址传递给free. 这个地址是在ab还是中是完全不相关的temp。返回的malloc是分配内存的地址。您可以将该值复制到许多不同的地方。当您释放内存时,重要的是将该值传递给free. 它是否在ab或中都没有关系temp

脚注

1 C 标准不要求您释放内存,并且在任何通用多用户操作系统中,您在退出进程时不需要释放内存,因为malloc仅用于在您的进程中组织内存。当进程退出时,操作系统会使用自己的数据结构来回收进程的所有内存。进程内部需要释放内存,以避免在停止使用时浪费它。释放它会释放它以供其他用途。如果您的程序随着时间的推移分配大量内存,则尤其如此 - 当不再需要时未释放的分配内存的积累可能会导致不必要的系统资源使用,并可能导致您的进程和其他进程的性能严重下降。它还可能导致您的程序耗尽可用内存并且无法分配更多内存。在专用嵌入式系统或操作系统内核代码中,可能需要释放分配的内存。


推荐阅读