gpt4 book ai didi

c - 通过卡住整个对象来释放链表节点

转载 作者:行者123 更新时间:2023-11-30 16:08:17 25 4
gpt4 key购买 nike

我想使用链表来实现堆栈。此外,我想使用类似模板之类的东西。因此我得到了这样的结构:

  1. 节点
#define node(T)            \
struct node_##T { \
T value; \
struct node_##T *next; \
}
  • 堆栈
  • #define stack(T)           \
    struct stack_##T { \
    size_t size; \
    node(T) * begin, *end; \
    }

    最后我想释放堆栈。我总是使用 while/recursive 来完成它。类似这样的事情:

    while (begin != NULL)
    {
    temp = begin;
    begin = begin->next;
    free(temp);
    }

    就我而言,此方法的使用比平常更复杂。因此,我只是释放该对象。

    #include "stack.h"
    typedef char* string;
    int main() {
    stack(string)* a;
    stack_constructor(string, a);
    stack_resize(a, 5);
    free(a);
    return (0);
    }

    调试显示一切正常。我在“free(a)”之前和“free(a)”之后设置了两个断点。 before freeing after freeing但我对这些有一些疑问。我认为我们正在删除为指针分配的内存,但值仍在内存中。我是不是看错了?

    最佳答案

    free(a) 释放 a 指向的对象。它不会释放该对象所指向的对象。因此它将释放 stack 对象,但不会释放任何 node 对象。

    关于c - 通过卡住整个对象来释放链表节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59393964/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com