gpt4 book ai didi

c - 在 C 中交换动态分配的变量时,临时变量是否需要 free?

转载 作者:行者123 更新时间:2023-12-04 11:40:21 25 4
gpt4 key购买 nike

假设我想交换 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;

必须释放 temp 吗?

最佳答案

a 都没有, b , 或 temp需要被释放。命名对象由 C 实现管理。你永远不需要释放它们。malloc分配的内存必须释放1。这是通过将内存地址传递给 free 来完成的。 .这个地址是否在a中完全无关紧要, b , 或 temp . 返回者 malloc是分配内存的地址。您可以将该值复制到许多不同的地方。当您释放内存时,重要的是将值传递给 free .是否在a都没关系, b , 或 temp .
脚注
1 C 标准不要求释放内存,并且在任何通用多用户操作系统中,退出进程时不需要释放内存,如 malloc仅用于在您的进程中组织内存。当进程退出时,操作系统使用它自己的数据结构来回收进程的所有内存。进程内部需要释放内存,以避免在停止使用时浪费内存。释放它会释放它以供其他用途。如果您的程序随着时间的推移分配大量内存,则尤其如此 — 不再需要时未释放的已分配内存的累积可能会导致对系统资源的不必要使用,并可能导致您的进程和其他进程的性能严重下降。它还可能导致您的程序耗尽可用内存并无法分配更多内存。在专用嵌入式系统或操作系统内核代码中,可能需要释放分配的内存。

关于c - 在 C 中交换动态分配的变量时,临时变量是否需要 free?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com