C++内存分配和链表实现

标签 c++ malloc linked-list memset

我正在编写软件来模拟“首次匹配”内存分配模式。

基本上,我分配了一个 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/

相关文章:

c++ - QSqlDriver::close 使应用程序崩溃

java - 从文件读取时如何将一行保存到链接列表中并将下一行保存到另一个列表中

java - LinkedList越界异常

c - 尝试使用链接列表时出现无限循环

尽管明确声明为私有(private),但 c++ 函数仍可公开调用

c++ - 将字符串中的第一个字母转换为大写

c++ - 对构造函数的调用不能出现在常量表达式中

c - Linux 中的物理位置感知用户空间内存分配(内存 Controller 亲和性)

c - 3D数组的动态内存分配

c - 如何在 C 中的结构中初始化 const(使用 malloc)