在c++中读取位置时发生访问冲突

access violation reading location in c++

本文关键字:访问冲突 位置 c++ 读取      更新时间:2023-10-16

我有一个线程,它读取多播数据并更新某些数据结构

以及由chai 3d库处理的另一个线程

当我刚运行库代码时,它运行得很好。

当我运行y线程时也是

我在chai3d代码中的一个例程中遇到了访问冲突。

我的线程代码

    unsigned int __stdcall ThreadFunc(void* data)
{
    char *timeOld;
    int ID;
    while(1)
    {
    char *position = _com_util::ConvertBSTRToString(cpi->getData());
    ID = cpi->getMulticastDataID();
    char* timeNew = _com_util::ConvertBSTRToString(cpi->getTime());
    if(timeFirst == true)
        {
        timeOld = new char[strlen(timeNew) + 1];
        strcpy(timeOld,timeNew);
        timeFirst = false;
        }
    if((strcmp(timeNew,timeOld) != 0) && (AddItselToList == true) && ( ID != 99))
    {handlePacket(position,ID);
    strcpy(timeOld,timeNew);}
    delete[] position;
    delete[] timeNew;
    }
    delete[] timeOld;
}

cpi是指向com c#对象的指针,其中getdata、gettime返回字符串,getmulticastid返回int。

我的线程代码有什么磨损吗?

_beginthreadex(NULL,0,ThreadFunc,NULL,0,NULL);
while循环的右大括号前的delete[] positiontimeNew。ThreadFunc的右大括号前的delete[] timeOld。此外,您确定timeOld足够长,可以将timeNew复制到其中吗?这可能是您违反访问权限的原因。