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

调用fclose失败,因为您传递的是 null FILE*。为空,FILE*因为调用freopen_s失败。该调用失败,因为该进程没有要打开的控制台。

您的程序在调试版本中工作,因为您调用AllocConsole为您的进程分配控制台。您的程序在发布版本中不起作用,因为您不调用AllocConsole; 您调用AttachConsole,如果父进程没有控制台,它将失败(并且没有效果)。

于 2013-11-23T06:20:31.533 回答