我正在尝试使用系统调用完成一个练习,需要为一个结构体分配内存。我的代码如下:
myStruct * entry = (myStruct *)mmap(0, SIZEOF(myStruct), PROT_READ|PROT_WRITE,
MAP_ANONYMOUS, -1, 0);
为了澄清,我不能使用
malloc()
,但可以使用mmap()
。在Windows的Netbeans中我没有任何问题,现在我正在Ubuntu的命令行中编译和运行,每次尝试访问时都会出现“分段错误”。
有没有原因可以解释为什么它在一个平台上可以工作而在另一个平台上就不行?mmap()
是否是以这种方式分配内存的有效方法?我的担心是我将为每个mmap()
调用分配大块内存,现在我只是无法运行它。
此外,mmap()
返回的错误是22 - 无效参数(我在撰写问题时进行了一些故障排除,因此上面的代码中没有错误检查)。地址为0,自定义的SIZEOF()
函数在其他的mmap参数中起作用,我使用了MAP_ANONYMOUS
,因此fd
和offset
参数必须为-1和0。
PROT_READ|PROT_WRITE
部分是否存在问题?
4096
或8192
或其他二的幂代替SIZEOF(myStruct)
,它是否有效? - JabberwockySIZEOF()
。并且你应该添加MAP PRIVATE
。 - albttxSIZEOF()
不正确,实际项目应为sizeof()
,即全部小写。 - user3629249mmap()
函数的第一个参数是一个地址指针,而不是一个整数。强烈建议使用NULL
而不是0
。 - user3629249