【发布时间】:2015-11-17 13:47:21
【问题描述】:
正如我们所知,所有动态分配的内存都需要由程序员自己使用 free() 来释放。对于程序员自己创建并为其分配内存的变量,几乎没有问题,因为他知道调用 free() 是为了什么。但是从像 getenv() 这样的 glibc 函数返回的指针呢?起初我以为我需要释放 getenv() 结果指向的内存,但后来注意到这个人说:
如通常实现的那样,getenv() 返回一个指向字符串的指针 在环境列表中。调用者必须注意不要修改 这个字符串,因为那会改变进程的环境
这意味着函数 getenv() 没有调用 malloc() 来为返回地址的字符串创建一个新空间。 那么这些函数返回的哪些指针需要被明确地释放呢?
【问题讨论】:
-
要求 这些功能 有点过于宽泛了。如果调用者确实需要释放返回的指针,通常会记录在案。
-
@haris 为什么没有?你的意思是这些函数都没有在内部调用 malloc() 然后返回地址?
-
@hariz 这绝对不是没有 - strdup 是我脑海中的一个例子。答案是您需要阅读每个函数的手册页才能理解它。
-
作为一个非常粗略的经验法则:如果您希望该函数为您创建一个新对象,您可能还必须在某个地方摆脱 dat。一般来说:阅读文档。