Met*_*est 1 c linux memory-management mmap x86-64
当我运行以下代码时出现分段错误...
int * x = mmap( 0, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE, 0, 0 );
x[0] = 42; // <--- Segmentation fault happens due to this
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
您已指定了错误的标志和文件描述符.它看起来像你想要的是一个匿名(没有文件支持)映射.如果是这种情况,正确的呼叫将是:
x = mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
Run Code Online (Sandbox Code Playgroud)
您需要使用该MAP_ANONYMOUS
标志告诉Linux没有文件.你应该传递-1
文件描述符,而不是0.