2012-03-12 2 views
0

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

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

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

когда я бег у нитки и

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

ИВК является указателем на COM C# объекта, где GetData, GetTime Струны Возвращение и getmulticastid возвращает Int.

Есть ли что-то с моим кодом резьбы?

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

У вас есть утечки памяти. Вы должны удалить [] строки, возвращаемые ConvertBSTRToString, когда они вам больше не нужны. – Henrik

+0

Вы пытались запустить программу внутри отладчика? Это поможет вам определить местоположение аварии, а также позволить вам просматривать переменные, чтобы увидеть, что они содержат. Вы делаете это сначала, и если вы все еще не можете понять это, добавьте эти детали в вопрос (особенно в строке, в которой сбой программы). –

+0

строки нужны, пока программа не выйдет! Я запускаю его через отладчик, и он дает мне адрес –

ответ

0

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

+0

Я изменил код, я также изменил его выше, но все равно получаю нарушение доступа –

+0

@ user494461 - а как насчет длины строк? Возможно ли, что timeNew больше, чем timeOld? Это может быть проблемой во второй strcpy. – Henrik

Смежные вопросы