c++ - Access violation error using ofstream/fstream? -
i writing file, using ofstream
. the writes rapid 1 thing, file closed , opened extremely frequently. below code:
if( !(is_error(wcstombs_s( (size_t*)&out, fileregnot, 1536, finalizedmessage, 1536 ))) ) { while(reporttransferinprogress); regfilebeingwritten = true; if(fileregreportsent) { file.open("c:\\filereglog.txt", ios::out); fileregreportsent = false; } else file.open("c:\\filereglog.txt", ios::out | ios::app); if(file.is_open() && file.good() && !file.fail() && !file.bad()) { file<<fileregnot<<"\n"; file.close(); } regfilebeingwritten = false; }
the access violation occurs @ statement file.close()
. program breaks , compiler jumps following code in standard fstream file
(the highlighted line breaks):
this call stack(startrecievingnotifications name of function wrote in file being written):
now these states of local variables in fstream
file's code segment:
here _myfile variable seems not point valid memory location, problem right? when go function called code i.e "file.close()" pasted in beginning, these states of local variables:
here _myfile variable has valid memory location , data in it. doing wrong? have used checks possibly think of before writing , closing file:
if(file.is_open() && file.good() && !file.fail() && !file.bad()) { file<<fileregnot<<"\n"; file.close(); }
also, error doesn't occur frequently. won't occur multiple minutes while files being continuously written , pops application executed.
this original error statement:
what doing wrong here?
edit: (complete function code)
dword winapi startrecievingnotifications( _in_ lpvoid lparg) { handle hcomport = *((handle*)lparg); hresult hr; simple_message messageenvelop; tchar processname[max_path]; wchar finalizedmessage[1536]; wchar pid[7]; int pid, out; ofstream file; for(;;) { hr = filtergetmessage(hcomport, &messageenvelop.messageheader, sizeof(simple_message), null); if(!is_error(hr) && checkmessage(messageenvelop.message.contents)) { for(int = 0, j = 0; messageenvelop.message.contents[i] != '\0' && < 1535; i++, j++) { if(i == 0) { for(; messageenvelop.message.contents[i] != '#' && < 6; i++) pid[i] = messageenvelop.message.contents[i]; pid[i] = '\0'; pid = _wtoi(pid); if(getprocessname(pid, processname, true)) { for(j = 0; processname[j] != '\0'; j++) finalizedmessage[j] = processname[j]; } else = 0; } finalizedmessage[j] = messageenvelop.message.contents[i]; if(messageenvelop.message.contents[i + 1] == '\0') finalizedmessage[j + 1] = '\0'; } finalizedmessage[1535] = '\0'; appendsystemtime(finalizedmessage); if( !(is_error(wcstombs_s( (size_t*)&out, fileregnot, 1536, finalizedmessage, 1536 ))) ) { while(reporttransferinprogress); regfilebeingwritten = true; if(fileregreportsent) { file.open("c:\\filereglog.txt", ios::out); fileregreportsent = false; } else file.open("c:\\filereglog.txt", ios::out | ios::app); if(file.is_open() && file.good() && !file.fail() && !file.bad()) { file<<fileregnot<<"\n"; file.close(); } regfilebeingwritten = false; } } } }
Comments
Post a Comment