C中结构中指针的大小

C中结构中指针的大小,c,struct,C,Struct,我有这样的结构: struct node{ int key; int data; struct node *next; }; 然后我创建了链接: struct node *link = (struct node*) malloc(sizeof(struct node)); link->key = 10; link->data = 100; link->next = link; printf("Size of link is %zd\n", sizeo

我有这样的结构:

struct node{
    int key;
    int data;
    struct node *next;
};
然后我创建了
链接

struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = 10;
link->data = 100;
link->next = link;
printf("Size of link is %zd\n", sizeof(link));
free(link);
printf("Now size of link is %zd\n", sizeof(link));
当我想知道每个元素的大小时,我会:

printf("%zd %zd %zd %zd\n", sizeof(link->key), sizeof(link->data), sizeof(link->next), sizeof(link));
作为输出,我有:

4 4 8 8
因此,第一个问题是为什么
sizeof(link)
不包括
sizeof(link->next)

第二个问题是: 当我尝试
释放
链接的
分配内存时:

struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = 10;
link->data = 100;
link->next = link;
printf("Size of link is %zd\n", sizeof(link));
free(link);
printf("Now size of link is %zd\n", sizeof(link));
我有:

Size of link is 8
Now size of link is 8
为什么没有释放记忆

因此,第一个问题是为什么
sizeof(link)
不包括
sizeof(link->next)

因为
link
是指针。如果您打印
sizeof(*link)
,您会

为什么没有释放记忆

释放内存确实会发生。只是不能用您尝试的方式来测量它,即使用
sizeof
。无论指针指向的是有效的还是无效的,大小都保持不变