C中结构的指针大小

时间:2016-09-11 00:40:05

标签: c struct

我有这样的结构:

struct node{
    int key;
    int data;
    struct node *next;
};

然后我创建了link

struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = 10;
link->data = 100;
link->next = 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)

第二个问题是: 当我尝试free分配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

为什么没有释放内存?

1 个答案:

答案 0 :(得分:4)

  

所以,第一个问题是为什么sizeof(link)不包含sizeof(link->next)

因为link是一个指针。如果您打印sizeof(*link),则会get a different number

  

为什么没有释放内存?

释放内存确实发生了。它只是无法以您尝试的方式进行衡量,即使用sizeof。无论指针指向有效的东西还是无效的东西,大小都保持不变。