mmap函数始终返回MAP_FAILED

问题描述

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>

int main(int argc,char *argv[]) 
{
    int* ptr = (int *) mmap(0x4096,sizeof(int)*1024,1100,MAP_PRIVATE,0);
    fprintf(stdout,"%p\n",ptr);
    if (ptr == MAP_FAILED) 
    {
        fprintf(stderr,"Could not mmap\n");
        return 1;
    }

    return 0;
}

我的代码无法打印,我无法弄清楚我在做什么错。我的内存页面大小为4096字节,因此我的地址输入也与页面大小对齐。我想做的是在我指定的地址上使用mmap为1024个整数分配一个内存空间。

解决方法

正如一些人在评论中指出的那样,我应该使用MAP_ANONYMOUS,并且没有正确指定内存位置。使用以下参数有效,

mmap((void*) 0x0804a000,sizeof(int)*1024,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,0);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...