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

时间:2012-03-12 14:23:47

标签: c++ multithreading com-interop

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

和另一个由chai 3d library

处理的线程

当我运行我的库代码时,它工作正常。

当我运行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 ##对象的指针,其中getdata,gettime返回字符串,getmulticastid返回int。

我的线程代码有什么问题吗?

_beginthreadex(NULL,0,ThreadFunc,NULL,0,NULL);

1 个答案:

答案 0 :(得分:0)

在while循环的右括号之前

delete[] positiontimeNew。在ThreadFunc的右大括号之前delete[] timeOld。此外,您确定timeOld足够长,可以将timeNew复制到其中吗?这可以解释您的访问违规行为。