内存泄漏与否 - 链表

时间:2013-11-23 16:56:58

标签: c pointers memory-leaks struct linked-list

我已经创建了一个基于链表的程序,其中每个节点都是一个结构,它包含一个8字节的整数和一个指向下一个节点的指针。队列遵循FIFO。它似乎工作正常,但我怀疑该程序可能会遭受堆中的某种内存泄漏或内存碎片。我可能错了 - 希望!!!当以FIFO顺序删除节点时,我使用库函数 free ,其中我放置了该节点的指针。当链表为空时,我还将指向第一个和最后一个节点的指针设置为NULL。

但有一件事我不理解,可能是内存泄漏的迹象。

假设我创建了3个包含3个整数的节点。这些节点的memoryaddresses如下:

205888

206032

206056

现在我决定删除这些节点并将资源释放到这三个节点。

当我开始添加节点时 - 第一个节点不从地址205888开始,它从地址206056开始。

这是否会在我的程序中显示内存泄漏?

这是破坏节点的功能。它将要删除的节点的地址作为参数

 static int destroy_node(node *node_ref) {
    int data = 0;
    data = node_ref->data;
    free(node_ref);
    return data;
}

和结构

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

2 个答案:

答案 0 :(得分:1)

如果您释放了一块内存,则无法确定接下来会为您分配的内容。所以这种行为基本上不会显示内存泄漏。

您的代码中可能存在内存泄漏,但您无法使用分配的节点的地址检测到它。

要检测代码中的内存泄漏,您需要Valgrind

等工具

答案 1 :(得分:0)

这取决于堆中的算法。严格地说,这是“不确定的”并且不受你的控制。它可能是一个标志,但它不是证据。