我正在搞鏈接列表類型的數據結構以獲得更好的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