gpt4 book ai didi

c - VS2012 上 getenv/putenv 的内存损坏

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:19 24 4
gpt4 key购买 nike

尝试运行以下在 VS2012 中编译的代码时,我似乎遇到了内存损坏。

它在 VS2010 和以前的版本中工作正常:

char *var1 = getenv("var1");  // Value for var1 is correct here

char var2S[MAXSTRING];

sprintf(var2S, "VAR2=%s/a/%s/b", var1, getValue()); //Var2 looks correct

static const char *env_string = strdup(const_cast<char *>(var2S));

putenv((char *)env_string); // Value for var1 is corrupt after this call

最佳答案

getenv() 返回指向环境进程全局副本的指针。来自 MSDN:

getenv and _putenv use the copy of the environment pointed to by the global variable _environ to access the environment

所以 var1 指向那组数据。一旦您调用 putenv(),该全局数据就会被修改,并且 var1 指针指向更改的内存。您需要将 var1 指向的数据复制到您自己的缓冲区中以修改环境,或者再次调用 var1 = getenv("var1") 以“刷新”指针。

请注意,在 your answer 中您指出使用 getenv_s() 可以为您解决问题。这是因为 getenv_s() 将环境字符串复制到您提供的缓冲区中,而不是返回一个处于全局 _environ 状态的指针,该状态稍后可能会更改。

关于c - VS2012 上 getenv/putenv 的内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com