执行此代码时,函数结尾处会抛出以下错误
"运行时检查失败#2 - 围绕变量'路径'被腐蚀了#34;
TCHAR path[1024]={0};
GetTempPathW((sizeof(path)) - 1, path);
我意识到变量'路径'声明将分配2048字节。
执行时,'路径'几乎不到32字节就被填满了。但它将0到2048的其余部分(在初始化时已经为0)以及额外的2044字节设置为0。
(即)额外的2044个字节被设置为0.(它不应该访问)
有人可以告诉我为什么会这样吗?
答案 0 :(得分:2)
来自此处的文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364992(v=vs.85).aspx
nBufferLength [in]
由lpBuffer标识的字符串缓冲区的大小,在 TCHAR 中。
考虑这样的事情:
// buffer size in TCHARS
static constexpr DWORD buffer_size = MAX_PATH+1;
// make enough space, regardless of the size of a TCHAR
TCHAR buffer[buffer_size];
// communicate buffer length in terms of numbers of TCHARS
auto path_len = GetTempPath(buffer_size, buffer);
// check path_len for 0 - that would indicate an error
或者如果您愿意,
TCHAR buffer[MAX_PATH + 1];
// communicate buffer length in terms of numbers of TCHARS
auto path_len = GetTempPath(std::extent<decltype(buffer)>::value,
buffer);
// check path_len for 0 - that would indicate an error