Почему при записи происходит сбой WriteFile в стандартный вывод?

Вот программа "Hello world", которая использует WinAPI's 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;
}

Если она выполняется в окне консоли, она радостно приветствует Однако, если вы попытаетесь перенаправить его стандартный вывод, как в

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++

Сообщение: «Не обрабатывать d исключение в 0x75ce85ea (KernelBase.dll) в srgprc2.exe: 0xC0000005: место записи нарушения прав доступа 0x00000000. "

Что здесь происходит? Спасибо!

12
задан user38329 19 November 2011 в 17:02
поделиться