【问题标题】:What kind of returned value from glibc functions needs to be free()d?glibc 函数的什么样的返回值需要 free()d?
【发布时间】:2015-11-17 13:47:21
【问题描述】:

正如我们所知,所有动态分配的内存都需要由程序员自己使用 free() 来释放。对于程序员自己创建并为其分配内存的变量,几乎没有问题,因为他知道调用 free() 是为了什么。但是从像 getenv() 这样的 glibc 函数返回的指针呢?起初我以为我需要释放 getenv() 结果指向的内存,但后来注意到这个人说:

如通常实现的那样,getenv() 返回一个指向字符串的指针 在环境列表中。调用者必须注意不要修改 这个字符串,因为那会改变进程的环境

这意味着函数 getenv() 没有调用 malloc() 来为返回地址的字符串创建一个新空间。 那么这些函数返回的哪些指针需要被明确地释放呢?

【问题讨论】:

  • 要求 这些功能 有点过于宽泛了。如果调用者确实需要释放返回的指针,通常会记录在案。
  • @haris 为什么没有?你的意思是这些函数都没有在内部调用 malloc() 然后返回地址?
  • @hariz 这绝对不是没有 - strdup 是我脑海中的一个例子。答案是您需要阅读每个函数的手册页才能理解它。
  • 作为一个非常粗略的经验法则:如果您希望该函数为您创建一个新对象,您可能还必须在某个地方摆脱 dat。一般来说:阅读文档。

标签: c++ c glibc


【解决方案1】:

那么从这些函数返回的哪些指针明确需要被释放?

手册页告诉你释放的那些,只有这些。

getenvfopenstrstrmemcpy 和许多其他人返回的指针应该free()d(原因很明显:只需阅读他们的手册页)。

【讨论】:

    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2011-04-13
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多