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 $ в конце программы? Выдается ли исключение, потому что указатель файла используется всеми процессами для всех выходных данных консоли?
Призыв к fclose
терпит неудачу, потому что вы передаете нуль FILE*
, FILE*
является нулевым, потому что вызов freopen_s
выходит из строя. Этот вызов не удался, потому что у процесса нет консоли, которую нужно открыть.
Ваша программа работает в отладочных сборках, потому что вы вызываете AllocConsole
выделить консоль для вашего процесса. Ваша программа не работает в сборках релиза, потому что вы не звоните AllocConsole
; ты звонишь AttachConsole
, который потерпит неудачу (и не будет иметь никакого эффекта), если у родительского процесса нет консоли.
Других решений пока нет …