【问题标题】:C Free Memory using free [duplicate]C 使用 free 释放内存 [重复]
【发布时间】:2015-02-21 13:42:58
【问题描述】:

如果使用malloc()为4个整数分配内存,应该不会返回第一个整数的内存地址吧?如果是这样,free() 不应该只从内存中释放第一个整数,而将所有其他整数留在后面吗?

【问题讨论】:

  • 您是在问 C de 是否应该明确设计以造成内存泄漏?
  • 我只是想知道它是如何工作的
  • 不,你应该 free() 整个块,事实上,如果你传递的指针不是由 *malloc() 函数之一返回的,这是未定义的行为。
  • 请写下你投反对票的原因:)
  • 如果你想确切地知道它是如何工作的,谷歌malloc.c 并查看各种实现的来源......

标签: c memory


【解决方案1】:

malloc() 跟踪所做的分配,包括它们的大小,并且free() 必须准确地给出malloc() 返回的地址,这会导致整个分配立即被释放。

【讨论】:

  • 在相关说明中,如果您考虑替代方案,malloc() 必须跟踪每个单独的字节,因为malloc() 不知道您打算放入其中的数据类型(例如, malloc(8) 可以是 8 个字节、两个 32 位整数或一个 64 位整数)。
【解决方案2】:

free() 不应该只从内存中释放第一个整数,而其余的都被抛在后面

不,不应该,否则调用free 会在大多数情况下导致内存泄漏。

要回答我认为您可能想问的问题,free 必须取消分配其参数所指向的整个内存块。它是如何做到这一点的是特定于实现的,但为了实现这一点,必须在幕后进行一些记账。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2014-03-15
    • 2011-07-18
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多