我可以在 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)
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)是不正确的,因为除非您确保指针的有效性,否则您无法取消引用指针。否则程序的行为是未定义的。