最近我试图调整某人的 mmap 代码并遇到以下错误。(实际上我现在对他们的代码有点怀疑,因为看起来他们在做一些不必要的事情 - 尝试将 MAP_FIXED 与他们自己的页面对齐内存一起使用。手册页建议使用 NULL 调用 mmap 作为 addr 参数应该在 Linux 上执行此操作。)所以我想我至少会测试使用 NULL 地址调用 mmap。但是,当我更改它时,我不太明白 gcc 向我抛出的错误。他们的代码工作正常,而我将lvalue required 作为 assignment 的左操作数。
本质上,他们在做以下事情:
uint8_t * ptr = (uint8_t *)mem;
if ((uint32_t)ptr % PAGE_SIZE)
{
ptr += PAGE_SIZE - ((uint32_t)ptr % PAGE_SIZE);
}
其中 mem 是一些 malloc 内存的 void *。
我正在尝试或多或少地使用类型转换:
if ((uint32_t)mem % PAGE_SIZE)
{
(uint8_t *)mem += PAGE_SIZE - ((uint32_t)mem % PAGE_SIZE); /* ERROR */
}
所以我认为我很聪明,并删除了一个我认为不需要的变量。有人可以告诉我为什么我的类型转换关闭了吗?干杯。