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

Sun*_*hah 32 c std

 char * val;                                                                        
 val = getenv("ENV_VAR_NAME");
Run Code Online (Sandbox Code Playgroud)

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

ice*_*ime 38

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

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

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


Nic*_*not 9

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

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

别碰了!


Mat*_*hen 8

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

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


Rav*_*ine 5

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