Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

sigmentation fail при работе с pthread

3.0K
07 мая 2009 года
ctraus
91 / / 16.06.2006
Код:
int main(int argc, char** argv) {
    int result=0,Oo=0,i=0,NumbElem=-1;
    char key;
    pthread_t *thr;
    thr=new pthread_t[ListLong];
    spis=new List;
    for(i=ListLong;i>=0;i--){
        NumbElem=spis->addNewElem(1);
        result=pthread_create(thr+i, NULL,thread_func, &NumbElem);
        if(result!=0){
            printf("Error in start thread!\n");
        }
    }
    mygetch();
    spis->ShowList();
    mygetch();
    spis->~List();
    cout<<"LOL";
    return (EXIT_SUCCESS);
}

void *thread_func(void * arg){
    int i=0,ololo=*(int*)arg;
    element *ThrElem,p;
    cout<<"Thread num "<<ololo<<"\t";
    sleep(1);
    ThrElem=spis->GetElemPointer(ololo);
    cout<<"ThrElem is num="<<ThrElem->Num<<" next="<<ThrElem->next<<endl;
 
    while(ThrElem->next){
        ThrElem->next=NULL;
     
    }
}

В произвольные моменты времени,если присутствует строчка "ThrElem->next=NULL;" и условие "ThrElem->next" вылетает "sigmentation fail" тогда как "ThrElem->data=666;" отрабатывает правильно.Если не пытаться перепресвоить указатель то все кррректно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог