место чтения нарушения прав доступа в c ++ - PullRequest
0 голосов
/ 12 марта 2012

У меня есть поток, который читает многоадресные данные и обновляет определенные структуры данных

, и другой поток, который обрабатывается 3d-библиотекой chai

, когда я просто запускаю код своей библиотеки, он работает нормально.

когда я запускаю y thread также

Я получаю нарушение прав доступа в одной из подпрограмм внутри кода 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);

1 Ответ

0 голосов
/ 12 марта 2012

delete[] position и timeNew перед закрывающей скобкой цикла while.delete[] timeOld перед закрывающей скобкой ThreadFunc.Кроме того, вы уверены, что timeOld достаточно долго, чтобы скопировать в него timeNew?Это может объяснить ваше нарушение прав доступа.

...