41 votos

C ADVERTENCIA sentinel perdido en la llamada a la función

Esta es mi advertencia.

Missing sentinel in function call

Cómo puedo eliminarlo.

Estoy utilizando linux y gcc compilador.

64voto

Michael Gaylord Puntos 2728

Parece que no puede haber una declaración de matriz con terminado NULL . Sin el null puede tener algunas rarezas de la memoria como el tiempo de ejecución no sabe donde termina el arreglo de discos y el siguiente bit de memoria.

47voto

Peter Bagnall Puntos 738

Me encontré con el mismo problema. El código que estaba causando, para mí, fue...

execl("/bin/bash", "/bin/bash", fname, '\0');

pero debe de ser...

execl("/bin/bash", "/bin/bash", fname, (char *)0);

El problema con la primera versión es que la lista de parámetros está destinado a terminar con un puntero null. Pero '\0' no es un puntero nulo, es un carácter nulo. Por lo que el valor (0) es correcto, es justo el tipo que está mal.

El (char *)0 también es cero, sino que arrojan como un tipo de puntero, que es un puntero nulo (es decir, apunta a la dirección 0). Esto es necesario para que el sistema pueda decir donde la lista de parámetros extremos para que no se mantenga la digitalización de los parámetros después de la última. Haciendo esto sería válido punteros que podría apuntar a la memoria - lo que probablemente podría causar un fallo de segmentación.

Que (char *)0 es llamado el centinela, y es lo que faltaba en el primer ejemplo.

Por último ten en cuenta que los NULOS se define como (void *)0, por lo que

execl("/bin/bash", "/bin/bash", fname, NULL);

Funciona igual de bien, y es un poco más cómodo. (Gracias a @mah).

18voto

kslcam Puntos 207

En Xcode si son codificación en objective-c y utiliza algunos métodos que toman lista de parámetro variable, necesita agregar objeto nulo al final de la lista.

Por ejemplo:

N ** SArray nombres = [NSArray arrayWithObjects: a "Name1", a "Nombre2"]; * //will resultado en la advertencia mencionada

Sin embargo, NSArray * nombres = [NSArray arrayWithObjects: a "Name1", a "Nombre2", nil]; //Correct

Espero que esto le ayudará!

1voto

qrdl Puntos 17813

Google es tu amigo.

Por primera vez para "centinela que falta en una llamada a función": http://www.linuxonly.nl/docs/2/2_GCC_4_warnings_about_sentinels.html

1voto

taus-iDeveloper Puntos 396

Centinela significa proteger o proteger... Por lo que en este contexto el error es que se produce causa podría ser missng los parámetros de protección. En caso de que usted está usando una matriz o Diccionario entonces asegúrese de que después de los nombres de los objetos acabar con ellos con la palabra clave nada.

Ejemplo:

[NSDictionary dictionaryWithObjectsAndKeys:@"UIAlertView", kSectionTitleKey,
              @"Show Custom", kLabelKey,
              @"AlertsViewController.m - alertOtherAction", kSourceKey];

La declaración antedicha producirá un error "Missing centinela en función llamada"

Sintaxis correcta:

[NSDictionary dictionaryWithObjectsAndKeys:@"UIAlertView", kSectionTitleKey,
              @"Show Custom", kLabelKey,
              @"AlertsViewController.m - alertOtherAction",kSourceKey,nil];

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X