我应该释放/删除getenv()返回的char *吗?

char * val; val = getenv("ENV_VAR_NAME"); 

上面是一个获取环境变量的代码,如果我不释放getenv(char *)返回的内存,它会导致内存泄漏吗? 如果没有那么请回答为什么?

不,你不应该。 标准7.20.4.5说:

getenv函数返回指向与匹配列表成员关联的字符串的指针。 指向的字符串不应被程序修改 ,但可能会被后续调用getenv函数覆盖。

我相信删除内容以粗体显示。

不。您无法控制其存储空间。 通常,它是指向多次重用的静态数组的指针。 因此,如果您计划将其存储以供以后使用, 则应将其复制(您应确保正确释放此副本)。

除非文档明确说明你可以释放指针,否则你不应该。

你不应该释放它。 这是手册页的一个片段:

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

别碰了!

你不应该删除它。 Getenv只是从char *数组中获取一个值(char ** environ,如果我没记错的话),它包含每个环境变量。 删除它们会导致未定义的行为。

可能最好的原因是标准没有说你可以。 仅仅因为函数返回指针并不意味着指针有效传递给free 。 除非函数的文档特别指出函数分配内存“好像通过调用malloc ”并返回指向该内存的指针,否则必须假定指针无效传递给reallocfree