尝试从链接列表中删除节点时未正确释放内存

时间:2017-12-23 18:14:09

标签: c multithreading locks

我正在尝试在使用互斥锁时从链表中删除节点。 出于某种原因,这可以在没有互斥锁的情况下正常工作,但如果我添加锁,它仍会保留已删除节点中的一些数据。 有人可以请教吗? 这是我的代码:

ptr2=head;
ptr1=ptr2->next;

pthread_mutex_lock(&ptr2->lock);
pthread_mutex_lock(&ptr1->lock);

if( head == NULL){
    fprintf(stderr,"List is empty");
    exit(1);
}

if(record == 1){
    head=head->next;
    pthread_mutex_unlock(&ptr1->lock);
    pthread_mutex_unlock(&ptr2->lock);
    free(ptr2);
}
else if (record > 1 && record < list_size){
    while(count <= record-1 && ptr1 ){
        pthread_mutex_unlock(&ptr1->lock);
        pthread_mutex_unlock(&ptr2->lock);*/
        ptr2 = ptr1;
        ptr1 = ptr1->next;
        count++;    
        pthread_mutex_trylock(&ptr2->lock); 
        pthread_mutex_trylock(&ptr1->lock);
    }
    if(ptr1){           
        ptr2->next = ptr2->next->next;
        pthread_mutex_trylock(&ptr2->lock); 
        pthread_mutex_trylock(&ptr1->lock);
    }
    pthread_mutex_unlock(&ptr1->lock);
    pthread_mutex_unlock(&ptr2->lock);  
    free(ptr1);
}
else
    printf("\nInvalid record. Please try again");

0 个答案:

没有答案