【问题标题】:C - How can I free dynamically allocated memory?C - 如何释放动态分配的内存?
【发布时间】:2017-06-13 12:31:36
【问题描述】:

看看这段代码,它是链表的一部分。

int main()

{
    List* head1 = NULL;

    insertFront(&head1, 1);
    insertFront(&head1, 2);

    print(head1);

    free(head1);

    return 0;
}

另一个功能是:

void insertFront(List** head, int value)

{
    List* node = (List*)malloc(sizeof(List));
    node->data = value;
    node->next = NULL;

    node->next = *head;
    *head = node;

   //free(node); essentially I am not freeing node
}

我的问题是:

  1. 我的代码会导致内存泄漏问题吗?

  2. 我是否需要(动态)为节点(函数内部)释放分配的内存?

  3. 如果我释放 head1,分配给节点的内存是否也会被释放?如果是,那么如何?

【问题讨论】:

标签: c memory-leaks dynamic-memory-allocation


【解决方案1】:

您有内存泄漏,因为您只释放列表中的第一个节点。您不想在insertNode 函数中使用free,否则您会立即丢弃刚刚分配的内存。

在你的程序结束时,你需要遍历列表和free每个元素。

while (head1) {
    List *temp = head1;
    head1 = head1->next;
    free(temp);
}

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 2023-03-03
    • 1970-01-01
    • 2011-03-17
    • 2016-07-16
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多