我遇到過這樣的問題。 我有一個庫,它允許通過UDP進程間通信。 它非常直截了當。該庫創建可用於其他進程寫入和讀取的共享內存。當進程想要讀取感興趣的內存時,它會傳遞一個字符串值,該值唯一指向相應的共享內存,並將指針傳遞給容器(char數組),以便在此期間接收讀取結果。圖書館提供安全的多線程。QThread和讀取內存
當線程離開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);
}
}
代碼提出:只有當我們允許library->readFromSharedMemory(struct_name, memory);
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;
}
異常。 _freeptd
無法訪問導致訪問衝突的內存。
我需要一隻手。 Thx提前。