【发布时间】:2017-12-20 00:21:39
【问题描述】:
小例子:
#include <Windows.h>
#include <string>
int main(int /*argc*/, char* /*argv*/[]) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //Behavior the same, with or without.
DWORD err = GetLastError();
std::string str;
return (int)err; //returns 127 iff line above uncommented, 0 iff commented
}
此程序返回127,对应于ERROR_PROC_NOT_FOUND(“找不到指定的过程。”)。请注意err 是在创建std::string 之前设置的。该程序使用 MSVC 2017 在调试模式下编译。
这种行为是预期的吗?如果没有,我能否得到一些确认(然后,我会提交错误报告)?
【问题讨论】:
-
我假设它是您的进程在进程启动期间遇到的最后一个错误。
-
如果字符串的构造确实出了问题,您更有可能遇到异常或动态链接器故障。
-
如果您注释掉
std::string str;,您会得到相同的值吗?此外,您每次运行都获得相同的值吗? -
你真的有问题吗?在调用任何 win32 API 之前调用 getlasterror 显然是没有意义的
-
@NathanOliver 我总是得到
127。如果我评论字符串行,我总是得到0。另外,作为参考,这是 MSVC 2017。
标签: c++ string windows getlasterror