为什么写入标准输出时WriteFile会崩溃?

为什么写入标准输出时WriteFile会崩溃?,第1张

概述为什么写入标准输出时WriteFile会崩溃

这是一个“Hello world”程序,它使用WinAPI的Writefile(在Microsoft Visual C ++ 2008 Express中编译):

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; }

如果在控制台窗口中执行,它会愉快地迎接世界。 如果你尝试redirect它的标准输出,但是,如

hello.exe > output.txt

该程序崩溃在Writefile(NulL指针exception)。 尽pipe如此,output.txt存在并且包含完整的正确输出。

崩溃时的调用堆栈:

转储文件分析

NTDLL!kifastsystemcallret

这个数据是随机的还是意味着什么?

windows服务崩溃

vfprintf崩溃在32位的linux

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)的未处理的exception:0xC0000005:访问冲突写入位置0x00000000。

这里发生了什么? 谢谢!

Powershell ISE在崩溃时存储标签?

无法在centos7上为deBUGging内核安装崩溃转储

如何仅使用WaitForDeBUGEvent系列函数来监视UNHANDLEDexception?

Windbg崩溃转储中的性能计数器

OpenCV 2.2 windows XP MinGW生成命名窗口,imshow崩溃

Writefile的第四个参数不是可选的 。 你传递NulL,这是不允许的。

第四个参数(告诉我们实际写了多少字节)期望指向DWORD值的指针(aka unsigned int),当你将NulL传递给那个参数时,它试图把DWORD写到导致异常的空指针,不仅强制通过指向该参数的指针,而且还应该在写入之后始终检查其值,因为虽然超过您提供的数据量,Writefile将会减少写入数据的概率。

总结

以上是内存溢出为你收集整理的为什么写入标准输出时WriteFile会崩溃?全部内容,希望文章能够帮你解决为什么写入标准输出时WriteFile会崩溃?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1154738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存