错误期间的 mmap 返回值

use*_*586 4 c mmap

我可以在 mmap 手册页中看到错误情况下的返回值是 (void *)-1.

c 编译器(void *)在常量之前将如何处理,这里-1.

以下代码片段是检查 mmap 错误值的正确方法吗?

int *p;
p = (int *)mmap();
if(p == -1)
        printf("error \n");
Run Code Online (Sandbox Code Playgroud)

我们是否需要使用以下错误条件检查。

if(*p == -1)
        printf("error \n");
Run Code Online (Sandbox Code Playgroud)

Moh*_*ain 6

int *p = NULL;
void *ret = mmap();
if(ret == MAP_FAILED) {  /* Or if(ret == (void *)-1) */
  /* error */
} else {
  p = ret;
}
Run Code Online (Sandbox Code Playgroud)

逐字检查(void *)-1或使用MAP_FAILED定义为(void *)-1.

if(*p == -1)是不正确的,因为除非您确保指针的有效性,否则您无法取消引用指针。否则程序的行为是未定义的。