是否强制转换void**并将第一个字节设置为nullptr

Casting void** and setting first byte to nullptr?

本文关键字:第一个 字节 设置 nullptr 转换 void 是否      更新时间:2023-10-16

在一个区块分配器中,我刚刚发现了这个模式。它可能是用C编写的,但我现在用的是C++17。

...
void * chunk = malloc(size);
((void**)chunk)[0] = NULL; // ???
if (last_chunk != NULL) {
((void**)last_chunk)[0] = chunk;
else {
first_chunk = chunk;
}

在这种情况下,为什么要强制转换为void**并将第一个字节设置为NULL我可以只做chunk = NULL而不做强制转换吗?因为operator[]只是将void**取消引用为void*(/edit:do not do chunk=NULL(

chunk = NULL会将刚才分配的指针设置为NULL。

*chunk = NULL无效,不能取消引用void指针。

((void**)chunk)将指针强制转换为指针数组,并且((void**)chunk)[0] = NULL将该数组的第一个元素设置为NULL(或者将分配的内存的第一个sizeof(void*(字节设置为0(。

CCD_ 12将是实现相同结果的替代方式。