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