我正在编写软件来模拟“首次匹配”内存分配模式。
基本上,我分配了一个 X 兆字节的大内存块,并在根据模式请求 block 时将其 segmentation 为 block 。
我使用名为“节点”的链表作为每个内存块的 header (这样我们就可以找到下一个 block ,而无需繁琐地遍历每个地址值。
head_ptr = (char*) malloc(total_size + sizeof(node));
if(head_ptr == NULL) return -1; // Malloc Error .. :-(
node* head_node = new node; // Build block header
head_node->next = NULL;
head_node->previous = NULL;
// Header points to next block (which doesn't exist yet)
memset(head_ptr,head_node, sizeof(node));
`
但是最后一行返回:
error: invalid conversion from 'node*' to 'int'
我明白为什么这是无效的..但我怎样才能将我的节点放入我新分配的内存的指针位置?
最佳答案
memset(void* memory, int value, size_t size)
所以,不是将head_node
复制到head_ptr
中(你想到的是memcpy
),
它用于初始化内存(清零、标记为已释放等...)。
在这种情况下,您可以简单地将 head_ptr
转换为 node*
:
node* head_node = (node*)head_ptr;
现在您根本不必删除 head_node
,或将值复制到 head_ptr
。
关于C++内存分配和链表实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549600/