我正在搞链接列表类型的数据结构以获得更好的C指针和结构,我不明白这一点。为什么node * root = malloc(sizeof(int))分配16个字节的内存而不是4个?
我认为malloc
返回指针的大小为sizeof
的第一块内存的地址。
在这种情况下,我node struct
看起来是这样的,是16个字节:
typedef struct node{
int index;
struct node* next;
}node;
我希望,如果我尝试这样做:node* root = malloc(sizeof(int))
malloc
将只分配4个字节的块并将该块的地址返回到指针node
。
不过,我仍然能够分配一个值,指数和获得root指向下一个节点,因为这样的:
root->index = 0;
root->next = malloc(sizeof(node));
,而最古怪的是,如果我尝试运行:printf("size of pointer root: %lu \n", sizeof(*root));
我得到size of pointer root: 16
,当时我显然预计会看到4
。
发生了什么事?
编辑:我刚刚试过malloc(sizeof(char))
,它仍然告诉我,*root
是16个字节。
计算中的下一位会发生什么? –
@EdHeal,对不起,我不确定你在问什么。 –
未定义行为意味着任何事情都可能发生,包括出现工作。 – aschepler