如何释放链表?

时间:2013-10-21 21:34:57

标签: c linked-list malloc free

我在函数中创建了一个链表,在程序的其余部分我使用指针访问列表。现在,如何在程序结束时释放此链接列表?我是否明白使用free(CircuitData)或者我是否必须通过列表释放每个节点?写这个我正在考虑释放每个节点是明显的答案......

另外,我还想询问如何确定程序中分配的所有内存是否正确释放?

 ListNodeType *CircuitData;
 CircuitData = NULL;
 ReadFile(&CircuitData, &numEl, &numNodes);


void ReadFile(ListNodeType **CircuitData, int *numEl, int *numNodes){

    ListNodeType *newPtr, *tempPtr;
    newPtr = malloc(sizeof(ListNodeType));
    *CircuitData = newPtr;
    newPtr->nextPtr = NULL;

    //MORE CODE

4 个答案:

答案 0 :(得分:6)

我会想到这样的事情:

struct node
{
    int data;
    node* next;
} *head;

void deleteAllNodes(node* start)
{
    while (start != NULL)
    { 
        node* temp = start; 
        start = start -> next;
        free(temp);
    }
}

答案 1 :(得分:2)

我认为你可以这样做:

void freeFunction(ListNodeType *CircuitData)
{
    void *victim;

    while (CircuitData)
    {
        victim = CircuitData;
        CircuitData = CircuitData->next;
        free(victim);
    }
}

答案 2 :(得分:1)

对于每个malloc,您将需要一个free,否则您将泄漏内存。分析程序以查看是否存在内存泄漏的一种可能方法是使用Valgrind

答案 3 :(得分:1)

对于您的第一个问题,是的,您应该遍历列表并free每个节点。

第二个问题有点难以回答。如果内存中有一个对象,但无法访问它,那就是内存泄漏。

您可以使用工具分析内存池。看看valgrind:

http://valgrind.org/