当我运行以下代码时出现段错误...
int * x = mmap( 0, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE, 0, 0 );
x[0] = 42; // <--- Segmentation fault happens due to this
这里有什么问题吗?
最佳答案
您指定了不正确的标志和文件描述符。看起来您想要的是匿名(不受文件支持)映射。如果是这样的话,正确的调用应该是:
x = mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
您需要使用 MAP_ANONYMOUS
标志来告诉 Linux 没有文件。您应该为文件描述符传递 -1
,而不是 0。
关于c - 为什么 mmap 在这里不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475165/