【问题标题】:How come i keep getting a memory leak when i run this function in my C program?当我在我的 C 程序中运行这个函数时,为什么我总是会出现内存泄漏?
【发布时间】:2020-09-20 05:43:43
【问题描述】:

所以基本上我正在为linkedList 编写代码,但由于这里的代码,我不断收到内存泄漏。谁能帮我找出原因,并向我解释我做错了什么?

struct Node* deleteNode(int data, struct Node* head){

    struct Node* current = head;
    struct Node* previous = NULL;

    if(head == NULL){
        return NULL;
    }
    while(current->data != data){
            if(current->next == NULL){
                return NULL;
            }else{
                previous = current;
                current = current->next;
            }
    }
    if(current == head){
        struct Node* temp = head;
        head = head->next;
        free(temp);
    }else
    {
        previous->next = current->next;
    }
    current = NULL;
    return head;
}

【问题讨论】:

    标签: c memory-leaks linked-list


    【解决方案1】:

    当它不是链接列表的第一个元素时,您永远不会在已删除的列表节点上调用 free()

    【讨论】:

    • 对不起,我对这一切还很陌生。你什么意思?如果我删除一个节点,我不应该释放那个节点地址吗?
    • @JorgeUrena 即使在current != head 的情况下,您也需要在节点上调用free()。与您在 if (current == head) 块下所做的类似。
    【解决方案2】:

    您遇到了内存泄漏,因为在current != temp 的情况下您没有调用free。您在else 部分所做的只是简单地分配previous->next = current->next 而不删除当前节点。

    您已经使用while 循环找到了要删除的节点,因此请在previous->next = current->next 之后添加free(current)

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2011-07-17
      • 1970-01-01
      • 2012-02-20
      • 2011-06-24
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 2010-09-11
      相关资源
      最近更新 更多