首页 > 解决方案 > 无法将指向结构的指针转换为 int 指针

问题描述

我正在尝试为我的操作系统构建一个内存管理器。但是,当我添加指向第一个堆项的下一个节点属性的指针时,它不起作用。我怀疑它无法将指向堆项的指针转换为无符号整数指针。

常数

#define MEMORY_BLOCK_FREE 0
#define MEMORY_BLOCK_USED 1
#define MEMORY_BLOCK_TAIL 2

内存块结构

typedef struct
{
    u32* addr;
    u32 size;
    u8 state;
    u32* next_block;
} memory_block;

添加功能

u32* add_block(u32 size)
{
    memory_block* cblock = &head;
    while (1)
    {
        if (cblock->state == MEMORY_BLOCK_TAIL)
        {
            break;
        }
        cblock = (memory_block*)cblock->next_block;
    }
    u32* addr = cblock->addr;
    cblock->size = size;
    cblock->state = MEMORY_BLOCK_USED;
    memory_block next;
    next.state = MEMORY_BLOCK_TAIL;
    next.addr = (u32*)(addr + size);
    cblock->next_block = (u32*)&next;
}

标签: cpointersmemory-managementoperating-systemheap-memory

解决方案


下一个内存块;

这是一个错误的代码。尝试这个

memory_block *next;
next = malloc(sizeof(memory_block));

推荐阅读