我的代码在我的计算机和我拥有的其他测试虚拟机上运行良好,但在我客户的计算机上,行为未定义。有时,在 _tmain 中的 MessageBox 上按 OK 后,编译的 exe 使用 100% 的 CPU,有时它会爆炸。
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>
DWORD GetVS(TCHAR **sGetVS)
{
DWORD dwSize = 1024;
*sGetVS = (TCHAR *) calloc(dwSize,sizeof(TCHAR));
// Buffer for the environment variable value.
TCHAR *sBuffEnv = (TCHAR *) calloc(4096+1,sizeof(TCHAR));
DWORD dwRet = GetEnvironmentVariable(L"VS90COMNTOOLS", sBuffEnv, 4096);
if (dwRet)
{
StringCchCopy(*sGetVS,_tcslen(sBuffEnv)+1,sBuffEnv);
MessageBox(0,sBuffEnv,*sGetVS,0);
_tcslwr_s(*sGetVS,_tcslen(*sGetVS)+1); // +1 is required for the null char
}
free(sBuffEnv);sBuffEnv=NULL;
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR *sTemp = NULL;
GetVS(&sTemp);
MessageBox(0,sTemp,L"",0);
free(sTemp);
return 0;
}
我试过删除最后一个free
,甚至放了一个sTemp=NULL;
after free
,但同样的问题正在发生。
谢谢!