使用valgrind修复内存泄漏

时间:2014-07-15 15:44:32

标签: c memory-management

我构建了一个链表库,我写了一个清除函数,它通过列表并释放与列表相关的所有内存。像这样:

/creating the list
list *myList = (list*) calloc(1, sizeof(list));

//lets try to add a node to the list
list_add_at (NULL, 0, (int*)100);
list_add_at (myList, 0, (int*)100);
list_add_at (myList, 1, (int*)200);
list_add_at (myList, 2, (int*)300);
list_add_at (myList, 3, (int*)400);
list_add_at (myList, 4, (int*)600);
list_add_at (myList, 5, (int*)800);

list_clear(myList);

然后当我运行valgrind时,它会说"间接丢失:5个块中的120个字节"这是我添加到列表中的节点数。 我的问题是如何释放我使用的这些记忆位置?

由于

1 个答案:

答案 0 :(得分:0)

根据valgrind documentation

  

"间接失去"表示您的程序在基于指针的结构中泄漏内存。

换句话说,这表明您的链接列表节点有另一个指针,您已将其设置为malloc的结果,并且您忘记取消分配该内存。

修复方法是为链表节点内的指针添加free

while ( temp != NULL ){
        list->head = temp->next;
        free(temp->allocated_ptr); // <<= Free the memory attached to the node
        free(temp);
        temp = list->head;
}