Pregunta

Estoy usando la función strlen de la biblioteca de cadenas c. Pasé un NULL y encontré un resultado misterioso. Sé que se supone que no debo pasar una cadena NULL pero necesito una explicación. El código se parece a esto

main()
{
  int k;
  char *s=NULL;
  strlen(s);
  // k = strlen(s);
}

En mi compilador gcc, funciona bien con el comentario. pero si quita el comentario en la línea k=strlen(s);

produce falla de segmentación. ¿Alguna explicación?

¿Fue útil?

Solución

Este es el código ensamblador sin asignación a la variable int

movq    $0, -16(%rbp)
movl    $0, %eax
leave
ret

el compilador no llama a _strlen porque el valor no se usará

Otros consejos

La primera llamada 'strlen' que no asigna su valor de retorno probablemente esté siendo optimizada por su compilador.

Pasar un puntero nulo a strlen da como resultado comportamiento indefinido . Puede pasar cualquier cosa. Incluyendo seg-faults.Y sin incluir seg-faults.

Si desea saber el motivo exacto, deberá mirar el código ensamblador que genera su compilador.Pero esto no te dirá nada útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top