I';m在C中运行Valgrind时接收到大小为8的无效读取

I';m在C中运行Valgrind时接收到大小为8的无效读取,c,valgrind,C,Valgrind,我已经编写了一个C linkedlist程序,正在运行一个简单的测试工具,以确保所有功能都以最佳方式工作。然而,尽管没有内存泄漏,根据Valgrind的说法,我的代码有两个问题,它们是 大小为8的读取无效 使用大小为8的未初始化值 谁能帮我解决这个问题,因为我不确定是什么原因导致了这个问题 头文件:LinkedList.h typedef struct LinkedListNode { void* data; struct LinkedListNode* next;

我已经编写了一个C linkedlist程序,正在运行一个简单的测试工具,以确保所有功能都以最佳方式工作。然而,尽管没有内存泄漏,根据Valgrind的说法,我的代码有两个问题,它们是

  • 大小为8的读取无效
  • 使用大小为8的未初始化值 谁能帮我解决这个问题,因为我不确定是什么原因导致了这个问题
头文件:LinkedList.h

typedef struct LinkedListNode
{
    void* data;
    struct LinkedListNode* next;
    struct LinkedListNode* previous;
} LinkedListNode;

typedef struct
{
    LinkedListNode* head;
    LinkedListNode* tail;
    int size;
} LinkedList;
linkedlist.c中的removeStart函数

void* removeStart(LinkedList* list)
{
    LinkedListNode* curr = list->head;

    void* ptr;

    if (curr->next == NULL)
    {
        free(curr);
        list->head = NULL;
    }
    if (curr->next != NULL)    //This is where the Invalid read of size 8 error occured
    {
        ptr = curr -> data;

        list -> head = curr -> next;

        free(curr);
        curr = NULL;

        list -> head -> previous = NULL;
        list->size--;
    }
 
 
    return ptr;
}
removeLast函数

void* removeLast(LinkedList* list)
{
    LinkedListNode* curr = list -> head;
    LinkedListNode* secondLast;

    void* ptr;

    if (isEmpty(list) == 0)
    {
        printf("List is empty");
    }
    else
    {
        while (curr->next != NULL)
        {
            secondLast = curr;
            curr = curr->next;
        }

        if (curr == list->head)
        {
            list -> head = NULL;
        }

    }

    ptr = curr->data;
    list->size--;
    list -> tail = secondLast;
    secondLast->next = NULL;        //This is where Use of uninitialised value of size 8 occured

    free(curr);
    curr = NULL;
    return ptr;
}

removeStart
中,如果
curr->next==NULL
则释放curr,但在下面两行再次使用它

removeLast
中,如果列表为空,则从不设置
secondLast