这是一个“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会崩溃?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)