Memory QThread与读取内存

Memory QThread与读取内存,memory,qthread,Memory,Qthread,我遇到过这样的问题。 我有一个库,它允许通过UDP进程间通信。 这很直截了当。库创建可供其他进程从中写入和读取的共享内存。当进程想要读取感兴趣的内存时,它会传递一个字符串值,该字符串值唯一地指向相应的共享内存,并传递指向容器(char数组)的指针,他希望在该容器中接收读取结果。库提供安全的多线程 当线程离开run()例程时,我有一个异常 异常:是访问冲突,在中引发 void __cdecl _freeptd ( _ptiddata ptd ) {

我遇到过这样的问题。 我有一个库,它允许通过UDP进程间通信。 这很直截了当。库创建可供其他进程从中写入和读取的共享内存。当进程想要读取感兴趣的内存时,它会传递一个字符串值,该字符串值唯一地指向相应的共享内存,并传递指向容器(char数组)的指针,他希望在该容器中接收读取结果。库提供安全的多线程

当线程离开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(结构名称,内存)时才会引发异常<代码>\u freeptd
无法访问导致访问冲突的内存


我需要帮忙。提前Thx。

我找到了一个解决方案:

如果分配内存:
char*memory=newchar(2000)
如果您使用
char*memory=(char*)malloc(2000),它将失败然后相应地释放,它将工作。我想它有一些新的、不同的编译器分配内存的方式


卢卡斯。

我认为问题在于线路

char* memory = new char(2000);
这段代码意味着您只想分配一个字符大小的内存,并且内存由2000初始化

如果您打算分配2000个字符大小的内存,您应该使用

char* memory = new char[2000];
然后使用

delete [] memory;
我希望这将帮助您解决访问冲突问题

delete [] memory;