Visual C++ 报告传递给 fclose
的参数无效,该参数是 freopen_s 返回的 FILE*
:
#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$ 吗?抛出异常是因为文件指针在所有控制台输出的进程之间共享吗?
fclose
调用失败,因为您传递的是空 FILE*
。 FILE*
为空,因为对 freopen_s
的调用失败。该调用失败,因为该进程没有要打开的控制台。
您的程序在调试版本中工作,因为您调用 AllocConsole
为您的进程分配一个控制台。您的程序在发布版本中不起作用,因为您没有调用 AllocConsole
;您调用 AttachConsole
,如果父进程没有控制台,它将失败(并且无效)。
我是一名优秀的程序员,十分优秀!