c - 无法将指向结构的指针转换为 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;
}
解决方案
下一个内存块;
这是一个错误的代码。尝试这个
memory_block *next;
next = malloc(sizeof(memory_block));
推荐阅读
- mysql - 在 SQL 查询中运行检查(可能是子查询?)
- c# - 一些对象没有出现在 iOS 构建中
- apache-spark - 在集群上运行 Spark (Scala) 时读取 parquet 文件的问题
- javascript - Angular - 如何从另一个组件切换组件中元素的可见性?
- jquery - Symfony 3.4 中视图中的隐藏值未传递给控制器
- python - 在 Python 中的命令中替换变量
- android-studio - Android构建小姐intellij
- dfdl - 在 DFDL 中打破循环
- javascript - ASP.NET 核心发布项目 - JavaScript 无法在所有设备上运行
- c# - 如何使用 ILoggerFactory 从 Polly 记录重试