У меня есть эта функция, чтобы написать какую-то информацию журнала в файлнеобработанного исключения иногда при вызове fcout
int Comm::saveInfo(LPTSTR msg)
{
#ifdef _log
wofstream fcout(LogFile, ios::out | ios::app);
if (fcout.is_open())
{
fcout << msg << "\t" << (int) ::GetTickCount64() << endl;
fcout.close();
}
#endif
return 0; // this is where visual studio 2012 is pointing to for the crash
}
Эта функция работает иногда, но иногда приводит к вылетам ... :(
Вот как я называю это функция:.
saveInfo(TEXT("set measurement time..."));
ret = readMsg(Buf, WAITTIMOUT);
в файле заголовок Comm
класса Заявляет std::wstring LogFile;
как частный член readMsg
является функцией читать пип е
int CpipeComm::readMsg(LPTSTR chBuf, DWORD timeout)
{
OVERLAPPED overlapped;
memset(&overlapped, 0, sizeof(overlapped));
memset(&chBuf[0], 0, sizeof(chBuf));
int err = 0;
ULONGLONG time1 = ::GetTickCount64();
DWORD bytesRead = 0;
do
{
// Read from the pipe.
fSuccess = ReadFile(
hPipe, // pipe handle
chBuf, // buffer to receive reply
BUFSIZE*sizeof(TCHAR), // size of buffer
&cbRead, // number of bytes read
&overlapped); // not overlapped
return 0;
}
И в конструктор класса Comm я
LogFile.assign(L"Pipe_log.log");
случайная ошибка, что я получаю это;
Unhandled exception at 0x000007FEF782AFD3 (msvcp110.dll) in : 0xC0000005: Access violation reading location 0x0000000000000012.
Я не уверен, что есть что-то, что я делаю неправильно! Каким-то образом эти две функции одно за другим вызывают крушение! Если я переместил функцию saveInfo
в другое место, все будет хорошо работать ...
Похоже, что вы могли бы быть разыменования нулевого указателя. К сожалению, здесь недостаточно, чтобы действительно диагностировать проблему. – Cornstalks
Похоже, вы получаете доступ к памяти вне пределов ... Запустите программу в отладчике до тех пор, пока не произойдет ошибка; отладчик должен поймать его и сообщить, где это произошло. –