freopen_s (& quot; conout $ & quot;) и fclose

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 $ в конце программы? Выдается ли исключение, потому что указатель файла используется всеми процессами для всех выходных данных консоли?

0

Решение

Призыв к fclose терпит неудачу, потому что вы передаете нуль FILE*, FILE* является нулевым, потому что вызов freopen_s выходит из строя. Этот вызов не удался, потому что у процесса нет консоли, которую нужно открыть.

Ваша программа работает в отладочных сборках, потому что вы вызываете AllocConsole выделить консоль для вашего процесса. Ваша программа не работает в сборках релиза, потому что вы не звоните AllocConsole; ты звонишь AttachConsole, который потерпит неудачу (и не будет иметь никакого эффекта), если у родительского процесса нет консоли.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]