Pude ver en la página de manual de mmap que el valor devuelto durante la condición de error es (void *)-1.
cómo tratará el compilador c (void *) antes de una constante, aquí -1 .
¿El siguiente fragmento de código es la forma correcta de verificar el valor de error de mmap?
int *p; p = (int *)mmap(); if(p == -1) printf("error \n");¿Necesitamos usar la siguiente verificación de condición de error?
if(*p == -1) printf("error \n");int *p = NULL; void *ret = mmap(); if(ret == MAP_FAILED) { /* Or if(ret == (void *)-1) */ /* error */ } else { p = ret; } Verifique literalmente con (void *)-1 o use la macro MAP_FAILED que se define como (void *)-1 .
if(*p == -1) es incorrecto ya que no puede eliminar la referencia del puntero a menos que garantice la validez del puntero. De lo contrario, el comportamiento del programa no está definido.