gpt4 book ai didi

c++ - Win32 释放环境变量导致 Windows 断点

转载 作者:行者123 更新时间:2023-11-30 02:08:34 26 4
gpt4 key购买 nike

我有一个 win32 c++ 应用程序,我获取所有环境变量并将它们存储在映射中。

当我在我的应用程序中调用 Win32 函数 FreeEnvironmentStrings() 时,我在 MSVC++ 中得到了一个奇怪的 Windows 断点。首先,我不知道这意味着什么以及为什么会发生?

我该如何解决我的问题以及出了什么问题?

这是我在主函数中调用的函数以及导致断点的函数:

std::map <tstring, tstring> GetEnvironmentVariablesEx()
{
// Post: Get all windows environment variables & store in a
// map(key=env.. variable name, value=env variable value)

std::map <tstring, tstring> envVariables;
TCHAR* environVar = GetEnvironmentStrings();
TCHAR* pos = _tcschr( environVar, _T('\0') );


// Skip over the "=::=::\0" of the environVar string
if ( pos != NULL ) { environVar = ++pos; pos = _tcschr( environVar, _T('\0') ); }
else return envVariables;


// I removed the following code because its long & distracting: the error still occurs without the code
// Code: ...use cstring functions to extract environ variables & values & store in map


FreeEnvironmentStrings( environVar ); // Breakpoint triggered here: "Windows has triggered a breakpoint in the application. This may be due to a corruption of the heap, which indicates a bug in myApp.exe or any of the DLLs it has loaded."
return envVariables;
}

最佳答案

您正在更改 environVar 指向的内容,因此您没有将有效的环境字符串指针传递给 FreeEnvironmentString 函数。

在修改之前将原始的 environVar 保存在某个地方,并在 Free 调用中使用它。

TCHAR* tobefreeed = GetEnvironmentStrings();
TCHAR* environVar = tobefreeed;
...
FreeEnvironmentStrings( tobefreeed );

关于c++ - Win32 释放环境变量导致 Windows 断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6482780/

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