我必须在C中使用malloc()分配的内存上调用free()吗?

我必须在C中使用malloc()分配的内存上调用free()吗?,c,memory,malloc,C,Memory,Malloc,如果我使用malloc分配内存,那么即使程序退出,我也必须调用free吗 #include <stdlib.h> #include <stdio.h> int main() { int *a = malloc(sizeof(int)); *a = 10; printf("%d", *a); free(a); return 0; } 如果我不调用空闲,程序退出后内存会发生什么变化?您不必这样做,但应该这样做以避免内存泄漏。程序退出

如果我使用malloc分配内存,那么即使程序退出,我也必须调用free吗

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int *a = malloc(sizeof(int));
    *a = 10;
    printf("%d", *a);
    free(a);
    return 0;
}

如果我不调用空闲,程序退出后内存会发生什么变化?

您不必这样做,但应该这样做以避免内存泄漏。

程序退出时,所有内存都将被释放。使用free的意义在于,您不会导致内存泄漏,从而导致程序在运行时消耗的内存超过其需要的内存。

另一个dup:这取决于操作系统。@WeatherVane什么操作系统不会自动释放资源?几年前,即使是DOS上的程序在程序终止时也会释放内存,这仅仅是因为程序停止时没有任何东西管理内存。@Malina你读过我上面评论中的链接了吗?问题被标记为C,而不是OS。在C语言中,malloc和free应该是匹配的,而不是依赖于操作系统。嘿,操作系统会做到这一点。@Malina对这个问题的公认答案是,它取决于操作系统有90票。@Malina不认为嵌入式系统是模糊的。它没有提到操作系统,因为操作系统可能还没有被编写出来,也没有要求操作系统在懒惰的C程序员吃过午饭后进行清理。我的评论是:这是操作系统特有的。公平地说,OP的例子不会是内存泄漏。如果省略了free,则应用程序仍然具有对malloced空间的引用。除非覆盖指针,否则不会泄漏。