我尝试使用valgrind检查内存泄漏,并使用以下选项:
valgrind --leak-check=full -v ./linkedlist2
Valgrind说createList()
函数中存在内存泄漏,但我无法找到它的原因。你能不能帮我理解内存泄漏的原因是什么?
相关代码:
struct node{
int data;
struct node* next;
};
struct node* createList(int num)
{
struct node* temp = NULL;
struct node* head = NULL;
struct node* curr = NULL;
int i = 0;
if(num <= 0)
{
printf("Invalid size for createList\n");
return;
}
for(i=0;i<num;i++)
{
temp = malloc(sizeof(struct node)); //allocate memory
temp->data = i+1;
temp->next = NULL;
if(i == 0)
{
head = temp;
curr = temp;
}else {
curr->next = temp;
curr = temp;
}
}
curr = temp = NULL;
//curr->next = temp->next = NULL;
free(curr);free(temp);
return head;
}
答案 0 :(得分:1)
此行导致问题
curr = temp = NULL;
//curr->next = temp->next = NULL;
free(curr);free(temp);
那么你在这里为结构节点指针NULL
和curr
分配temp
,从而它所指向的内存变成了垃圾。首先使用free()
释放内存并将其分配给NULL
将此代码替换为
free(curr);
free(temp);
curr = temp = NULL;
答案 1 :(得分:0)