我正在使用两种结构:
typedef struct ListNode{
void* value;
struct ListNode *next;
struct ListNode *prev;
} Node;
typedef struct List{
Node *first;
Node *last;
int count;
} List;
Run Code Online (Sandbox Code Playgroud)
然后我声明这些变量并分配内存
List *x = calloc(1,sizeof(List));
Node *x1 = malloc(sizeof(Node));
Node *x2 = malloc(sizeof(Node));
x->first = x1;
x->last =x2;
x->count = 2;
free(x);
Run Code Online (Sandbox Code Playgroud)
所以我敢肯定,如果我自由x的x->count,x->first,x->last也将消失为好。但是,在这种情况下,我使用gdb进行检查,并且令人惊讶的是,仅删除了x的第一个元素(例如:如果在结构中List我将count放在顶部,那么它将仅删除count并保留其余部分不变)。为什么会这样,free()整个结构如何?