这是一个使用WinAPI的WriteFile(在Microsoft Visual C 2008 Express中编译)的“Hello world”程序:
int _tmain(int argc,_TCHAR* argv[]) { wchar_t str[] = L"Hello world"; HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); if(out && out!=INVALID_HANDLE_VALUE) { WriteFile(out,str,sizeof(str),NULL,NULL); CloseHandle(out); } return 0; }
如果在控制台窗口中执行,它会高兴地打招呼世界.如果您尝试重定向其标准输出,但是,如
hello.exe > output.txt
程序在WriteFile(NULL指针异常)中崩溃.尽管如此,output.txt仍然存在,并且包含正确的输出.
崩溃时的调用堆栈:
KernelBase.dll!_WriteFile@20() + 0x75 bytes kernel32.dll!_WriteFileImplementation@20() + 0x4e bytes srgprc2.exe!wmain(int argc=1,wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++
消息:“srgprc2.exe中0x75ce85ea(KernelBase.dll)中的未处理异常:0xC0000005:访问冲突写入位置0x00000000”.
这里发生了什么?谢谢!
WriteFile
is not optional的第四个参数.你传递NULL,这是不允许的.
原文地址:https://www.jb51.cc/windows/364100.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。