[英]void ** equivalent to void * return?
void * alligned_malloc(size_t bytes , uint16_t allign)
{
uint16_t offset = allign - 1 + sizeof(void*);
void* p1 = malloc(offset + bytes);
void**p2 = (void**)(((size_t)p1+offset) & ~(allign - 1));
p2[-1] = p1;
return p2; // Why is this correct ? should not the return be p2[0] as it is returning void**
}
請幫我理解這個修改過的malloc怎么是void **相當於void *在這段代碼中返回?
任何類型的指針都可以隱式轉換為void *
,包括指向void *
的指針,即void **
。
void*
可以指向任何東西 ,包括另一個指針。
怎么是
void**
相當於void *
在這段代碼中返回?
任何指針類型都可以轉換為void*
。
不應該返回p2 [0],因為它返回void **
編號p2
是對齊內存的地址,因此該函數應該返回。 在函數內,它被重新解釋為void**
,以便在對齊的內存之前存儲原始地址; 據推測,這可以通過釋放內存的相應函數來回讀。 在函數外部,它不被解釋為指向任何特定類型 - 由調用者決定使用對齊內存的內容。
你可以退貨。 但我懷疑它是否按預期工作。
至少,你不能簡單地free()
它; 你必須有一個單獨的功能。
然而,它會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.