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$?是否因为文件指针在所有控制台输出的进程之间共享而引发异常?
发布于 2013-11-23 06:20:31
对fclose的调用失败,因为您要传递一个空FILE*。FILE*为null,因为对freopen_s的调用失败。该调用失败,因为进程没有要打开的控制台。
程序在调试生成中工作,因为您调用AllocConsole为进程分配控制台。您的程序在发布版本中无法工作,因为您没有调用AllocConsole;您调用了AttachConsole,如果父进程没有控制台,这将失败(并且没有任何效果)。
https://stackoverflow.com/questions/20158478
复制相似问题