加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

窗口 – 为什么WriteFile在写入标准输出时崩溃?

发布时间:2020-12-14 04:33:49 所属栏目:Windows 来源:网络整理
导读:这是一个使用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_VAL
这是一个使用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,这是不允许的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读