我试图分配 10000 个页表,但无法编译。我收到以下错误。
error: invalid conversion from 'void*' to 'char (*)[(<anonymous> + 1)]' [-fpermissive]
char (*my_memory)[sysconf(_SC_PAGESIZE)] = mmap(NULL,PAGE_SIZE * (100000 + OVERSIZE),PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0);
我的代码如下。
int main(int argc, char **argv) {
unsigned long physical_addr;
uint8_t *buf;
unsigned long virtual_addr;
char (*my_memory)[sysconf(_SC_PAGESIZE)] = mmap(NULL,PAGE_SIZE * (100000 + OVERSIZE),PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0);
int i;
for (i = 0; i * sizeof(*my_memory) < 10000; i++) {
my_memory[i][0] = 1;
}
}
不知道如何解决这个问题。请帮忙。
最佳答案
您不能从指针分配给数组。如果您将 my_pointer 设为裸指针,则此分配将起作用,但您将失去在发布的代码中执行双索引的能力;相反,您需要提出一个允许您使用一维数组的索引方案。您的代码将如下所示:
int main(int argc, char **argv) {
unsigned long physical_addr;
uint8_t *buf;
unsigned long virtual_addr;
char *my_memory = mmap(NULL,PAGE_SIZE * (100000 + OVERSIZE),PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0);
int i;
for (i = 0; i < 10000; i++) {
my_memory[PAGE_SIZE * i] = 1;
}
}
(请注意,我有点推断最后一个循环的用途;我的解释是您希望它将每个“页面”的第一个字节设置为 1)
关于c - 从 'void*' 到 char(*) 的非法转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683834/