我已经编写了一个C链表程序,并且正在运行一个简单的测试工具,以确保所有功能均以最佳状态运行。但是,尽管没有内存泄漏,但是根据Valgrind的说法,我的代码有两个问题,这是
头文件: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
您可以释放货币,但请向下2行使用。
在removeLast
如果列表为空,则secondLast
永远不会设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句