我有一个读取多播数据并更新某些数据结构的线程
和另一个由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);
答案 0 :(得分:0)
delete[] position
和timeNew
。在ThreadFunc的右大括号之前delete[] timeOld
。此外,您确定timeOld
足够长,可以将timeNew
复制到其中吗?这可以解释您的访问违规行为。