中止(核心转储)免费 - C错误

时间:2017-03-25 22:25:24

标签: c valgrind free core

我制作了一个程序来修改和使用双链表。但是,当我删除节点的函数运行时,它会创建一个中止(核心转储)的免费错误。由于程序的所有其他功能都有效,因此错误最有可能出现在List_remove函数中。我想要两次释放东西,但我无法找到答案。我和Valgrind一起检查过我是否有任何内存泄漏,但根据Valgrind的说法,一切都运行得很好。有人能用我的功能发现问题吗?谢谢!

void List_remove(List* list, Node* node)
{
    Node* current = node;
    if(node == list->head)
    {
        if(node->next == list->head)
        {
            free(list->head->item);
            list->head->item = NULL;
            free(list->head);
            list->head->prev = NULL;
            list->head->next = NULL;
            list->head = NULL;
            return;
        }
        else   
        {
            list->head = node->next;
            node->next->prev = node->prev;
            node->prev->next = node->next;
            free(node->item);
            node->item = NULL;
            free(node);
            node->prev = NULL;
            node->next = NULL;
            node = NULL;
            return;
        }
        return;
    }
    else
    {
        node->next->prev = node->prev;
        node->prev->next = node->next;
        free(node->item);
        node->item = NULL;
        free(node);
        node->prev = NULL;
        node->next = NULL;
        node = NULL;
        return;
    }
}

0 个答案:

没有答案