glibc 函数的哪种返回值需要 free()d?
What kind of returned value from glibc functions needs to be free()d?
众所周知,所有动态分配的内存都需要由程序员自己使用 free() 来释放。对于程序员自己创建并为其分配内存的变量,几乎没有问题,因为他知道调用 free() 的目的。但是从像 getenv() 这样的 glibc 函数返回的指针呢?起初我以为我需要释放 getenv() 结果指向的内存,但后来注意到那个人说:
As typically implemented, getenv() returns a pointer to a string
within the environment list.The caller must take care not to modify
this string, since that would change the environment of the process
这意味着函数 getenv() 尚未调用 malloc() 来为其地址返回的字符串创建一个新的 space。
那么从这些函数返回的指针中有哪些明确需要释放?
So which of the pointers returned from these functions explicitly needs to be freed?
手册页告诉你释放的那些,只有这些。
getenv
、fopen
、strstr
、memcpy
和许多其他人返回的指针应该 而不是 free()
d(原因很明显:只需阅读他们的手册页)。
众所周知,所有动态分配的内存都需要由程序员自己使用 free() 来释放。对于程序员自己创建并为其分配内存的变量,几乎没有问题,因为他知道调用 free() 的目的。但是从像 getenv() 这样的 glibc 函数返回的指针呢?起初我以为我需要释放 getenv() 结果指向的内存,但后来注意到那个人说:
As typically implemented, getenv() returns a pointer to a string within the environment list.The caller must take care not to modify this string, since that would change the environment of the process
这意味着函数 getenv() 尚未调用 malloc() 来为其地址返回的字符串创建一个新的 space。 那么从这些函数返回的指针中有哪些明确需要释放?
So which of the pointers returned from these functions explicitly needs to be freed?
手册页告诉你释放的那些,只有这些。
getenv
、fopen
、strstr
、memcpy
和许多其他人返回的指针应该 而不是 free()
d(原因很明显:只需阅读他们的手册页)。