是否强制转换void**并将第一个字节设置为nullptr
Casting void** and setting first byte to nullptr?
在一个区块分配器中,我刚刚发现了这个模式。它可能是用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
我可以只做(/edit:do not do chunk=NULL(chunk = NULL
而不做强制转换吗?因为operator[]
只是将void**
取消引用为void*
chunk = NULL
会将刚才分配的指针设置为NULL。
*chunk = NULL
无效,不能取消引用void指针。
((void**)chunk)
将指针强制转换为指针数组,并且((void**)chunk)[0] = NULL
将该数组的第一个元素设置为NULL
(或者将分配的内存的第一个sizeof(void*(字节设置为0(。
CCD_ 12将是实现相同结果的替代方式。
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 是否强制转换void**并将第一个字节设置为nullptr
- 检查 IP 第一个八位字节是否不以 127 / 224 或 255 开头
- std::memcmp 可以读取超过第一个差异的任何字节吗?
- 如何创建 std::vector of char/std::byte,其中第一个字节对齐到 16 个字节,但没有填充
- 更改s_addr的第一个字节
- 不能很好地与send()和recv()一起使用,短字符串的第一个字节丢失了.c++
- 从文件输出原始字节时,第一个字节已损坏
- C++ 将向量转换为<BYTE>第一个向量字节为 0 的字符串
- CryptDecrypt只解密第一个字节
- c++ fseek:是位置0或1的第一个字节
- 查找数组中给定索引的第一个和最后一个字节的地址
- 指向矢量<float>第一个字节的指针