繁体   English   中英

如何释放链表?

[英]How to free a linked list?

我已经在一个函数中创建了一个链表,在程序的其余部分中,我都使用指针来访问链表。 现在如何在程序结束时释放此链接列表? 我是简单地使用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

我会想到这样的事情:

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

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

我认为您可以执行以下操作:

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

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

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

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

第二个问题很难回答。 如果您在内存中有一个对象,但无法访问它,则是内存泄漏。

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

http://valgrind.org/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM