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


是否需要释放温度?

最佳答案

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

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

10-10 13:42
查看更多