簡體   English   中英

用malloc分配的數組的大小顯示比預期少一

[英]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的指針。

運行調試器后,我可以驗證keylen5

但是如果我放:

int kl = sizeof(bt->node[n].key) / sizeof(bt->node[n].key[0])

kl4

我做錯了什么?

仔細看,您將指針與數組混淆了:

其中bt-> node [n] .key是指向int16_t的指針。

因此,bt-> node [n] .key是指向已分配內存的指針,而不是分配的內存本身,而sizeof bt->node[n].keysizeof <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM