【问题标题】:Do I have to call free() on memory allocated using malloc() in C? [duplicate]我必须在 C 中使用 malloc() 分配的内存上调用 free() 吗? [复制]
【发布时间】:2018-05-19 19:45:20
【问题描述】:

如果我使用 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(),程序退出后内存会怎样?

【问题讨论】:

标签: c memory malloc


【解决方案1】:

程序退出时所有内存都会被释放。使用free 的目的是为了避免导致程序在运行时消耗超过所需内存的内存泄漏。

【讨论】:

  • 这取决于操作系统。
  • @WeatherVane 什么操作系统不会自动释放资源?即使是多年前 DOS 上的程序也会在程序终止时释放内存(仅仅是因为程序停止时没有任何东西管理内存)。
  • @Malina 您是否阅读了我上面评论中的链接?问题标记为 C,而不是 OS。在 C 中,mallocfree 应该匹配,而不是依赖“嘿,操作系统会做到”。
  • @Malina 接受了该问题的回答,说“这取决于操作系统”有 90 个赞。
  • @Malina 并不认为嵌入式系统“晦涩难懂”。它没有提到操作系统,因为该操作系统可能还没有被编写,并且没有要求在懒惰的 C 程序员吃完午饭后清理操作系统。我的评论仍然是:它是特定于操作系统的。
【解决方案2】:

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

【讨论】:

  • 好吧,公平地说,OP 的示例不会是内存泄漏。如果 free() 被省略,应用程序仍然有对分配空间的引用。除非您覆盖指针,否则这不是泄漏。
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2021-01-18
  • 2012-10-10
  • 2019-10-31
  • 2012-02-11
  • 2015-09-29
相关资源
最近更新 更多