Я столкнулся с такой проблемой.
У меня есть библиотека, которая позволяет через межпроцессное взаимодействие UDP.
Это очень прямо вперед. Библиотека создает общую память, доступную для других процессов для записи и чтения. Когда процесс хочет прочитать интересующую память, он передает строковое значение, которое однозначно указывает на соответствующую разделяемую память и передает указатель на контейнер (массив символов), где он ожидает получить результат чтения. Библиотека обеспечивает безопасную многопоточность.
У меня есть исключение, когда поток покинул процедуру run ().
Исключение: это нарушение прав доступа, и оно поднимается в
void __cdecl _freeptd (
_ptiddata ptd
)
{
/*
* Do nothing unless per-thread data has been allocated for this module!
*/
if ( __flsindex != 0xFFFFFFFF ) {
/*
* if parameter "ptd" is NULL, get the per-thread data pointer
* Must NOT call _getptd because it will allocate one if none exists!
* If FLS_GETVALUE is NULL then ptd could not have been set
*/
if ( ptd == NULL
#ifndef _M_AMD64
&& (FLS_GETVALUE != NULL)
#endif /* _M_AMD64 */
)
ptd = FLS_GETVALUE(__flsindex);
/*
* Zero out the one pointer to the per-thread data block
*/
FLS_SETVALUE(__flsindex, (LPVOID)0);
_freefls(ptd);
}
if ( __getvalueindex != 0xFFFFFFFF ) {
/*
* Zero out the FlsGetValue pointer
*/
TlsSetValue(__getvalueindex, (LPVOID)0);
}
}
код:
char* memory = new char(2000);
string struct_name = "struct";
bool m_running = false;
void Reader::run()
{
initalizeLibrary();
m_running = true;
//loop
while(true)
{
if ( ! m_running ) break;
library->readFromSharedMemory(struct_name, memory);
}
finalize();
}
void Reader::stop()
{
m_running = false;
}
Исключение возникает только тогда, когда мы разрешаем library->readFromSharedMemory(struct_name, memory);
. _freeptd
не может получить доступ к памяти, которая вызывает нарушение прав доступа.
Мне нужна рука. Спасибо заранее.