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*返回值?
printf("%d =? %d\d", sizeof(some_ptr_to_ptr), sizeof(*some_ptr_to_ptr));
,它等同于sizeof(void **)
和sizeof(void *)
。 - Elias Van Ootegemvoid*
等类型是为了寻求危险的人而设计的,如果使用指向指针的指针等类型,则确实应该知道自己在做什么。由于存在隐式类型转换,您将失去编译器类型检查的便利性。 - alk