[英]size of array allocated with malloc is showing one less than expected
我有這個:
alloc(Btree *bt, uint8_t *keylen, int16_t n)
{
bt->node[n].key = malloc(sizeof(int16_t)*(*keylen));
{
其中bt->node[n].key
是指向int16_t
的指針。
運行調試器后,我可以驗證keylen
為5
。
但是如果我放:
int kl = sizeof(bt->node[n].key) / sizeof(bt->node[n].key[0])
kl
是4
。
我做錯了什么?
仔細看,您將指針與數組混淆了:
其中bt-> node [n] .key是指向int16_t的指針。
因此,bt-> node [n] .key是指向已分配內存的指針,而不是分配的內存本身,而sizeof bt->node[n].key
是sizeof <pointer to ...>
,在您的系統中是8(64位)。
8 / sizeof uint16_t = 8 / 2 = 4
您無法檢查已分配內存塊的大小,必須信任malloc()
才能正常工作,否則請返回NULL
。
sizeof
運算符產生type
的大小 ,而不是分配給指針的內存量。
在你的情況下,發生的是
key
的類型為int16_t *
sizeof(bt->node[n].key)
給出sizeof(int16_t *)
在64位8
sizeof(bt->node[n].key[0])
是sizeof(int16_t )
,是2
最終,它是8/2
= 4。
絕對沒有malloc()
返回的malloc()
量的度量。
sizeof(bt->node[n].key)
是sizeof(uint16_t*)
可以是8(64位) sizeof(bt->node[n].key[0])
是sizeof(*(uint16_t*))
是2
和8 / 2
等於4。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.