我有这样的结构:
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
为什么没有释放内存?
答案 0 :(得分:4)
所以,第一个问题是为什么
sizeof(link)
不包含sizeof(link->next)
?
因为link
是一个指针。如果您打印sizeof(*link)
,则会get a different number。
为什么没有释放内存?
释放内存确实发生了。它只是无法以您尝试的方式进行衡量,即使用sizeof
。无论指针指向有效的东西还是无效的东西,大小都保持不变。