我在C中运行Valgrind时收到大小为8的无效读取

缺口

我已经编写了一个C链表程序,并且正在运行一个简单的测试工具,以确保所有功能均以最佳状态运行。但是,尽管没有内存泄漏,但是根据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;
}
约翰3136

在这种removeStart情况下,curr->next == NULL您可以释放货币,但请向下2行使用。

removeLast如果列表为空,则secondLast永远不会设置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Valgrind在C中无效读取大小8的分段错误

来自分类Dev

cpp-valgrind-大小为8的无效读取

来自分类Dev

cpp-valgrind-大小为8的无效读取

来自分类Dev

读取的大小无效-C valgrind

来自分类Dev

大小8的无效读取,大小8(Valgrind)的无效写入

来自分类Dev

使用valgrind时无效读取大小1

来自分类Dev

C ++无效的读取大小4 valgrind

来自分类Dev

Valgrind:抛出自定义异常时为“无效的读取大小1”

来自分类Dev

Valgrind:抛出自定义异常时,“读取大小为1无效”

来自分类Dev

Valgrind错误:使用由struct和malloc构成的列表时,大小为8的无效写入

来自分类Dev

C从valgrind读取无效

来自分类Dev

Valgrind大小为8的神秘无效写入错误

来自分类Dev

使用boost :: smatch在valgrind中读取大小无效1

来自分类Dev

valgrind中带有函数指针的读取大小无效

来自分类Dev

c Valgrind读取大小4无效->分段错误

来自分类Dev

无效的读取-Valgrind和C

来自分类Dev

Valgrind 错误无效读取大小 4

来自分类Dev

读取文件时valgrind中的错误-C

来自分类Dev

Valgrind:大小为1的无效读/写

来自分类Dev

Valgrind:无效读取的8号错误

来自分类Dev

Valgrind:无效读取的8号错误

来自分类Dev

大小为4的读取无效

来自分类Dev

为什么Valgrind在PETSc中分配char *时报告大小写为8的无效写入?

来自分类Dev

使用valgrind无效读取俄罗斯方块中的大小1

来自分类Dev

C分段错误,大小为4的读取无效

来自分类Dev

C - 大小 1 的无效读取

来自分类Dev

无效的读取内存-valgrind

来自分类Dev

valgrind错误:无效的读取

来自分类Dev

Valgrind中大小为4的无效读/写