0

Visual C++ は、無効なパラメーターが に渡されたことを報告していますfclose。そのパラメーターは、FILE*freopen_s によって返されます。

#include <WinSock2.h>
#include <iostream>

int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) {
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(nCmdShow);

#ifdef _DEBUG
    AllocConsole();
#else
    AttachConsole(ATTACH_PARENT_PROCESS);
#endif

    FILE* pCout;
    freopen_s(&pCout, "conout$", "w", stdout); //returns 0

    fclose(pCout);

#ifdef _DEBUG
    system("pause");
#endif

    FreeConsole();

    return 0;
}

プログラムの最後に conout$ を閉じようとしてはいけませんか? ファイル ポインタがすべてのコンソール出力のプロセス間で共有されているため、例外がスローされていますか?

4

1 に答える 1

4

null を渡しているため、への呼び出しfcloseは失敗していますFILE*。への呼び出しが失敗しFILE*たため、 は null です。freopen_sプロセスに開くコンソールがないため、その呼び出しは失敗します。

呼び出しAllocConsoleてプロセスにコンソールを割り当てるため、プログラムはデバッグ ビルドで動作します。AllocConsole;を呼び出さないため、プログラムはリリース ビルドでは機能しません。AttachConsole親プロセスにコンソールがない場合、これは失敗します (そして効果はありません) 。

于 2013-11-23T06:20:31.533 に答える