¿Qué valores de x e y causarán un bloqueo con algunos compiladores de C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
¿Qué valores de x e y causarán un bloqueo con algunos compiladores de C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Respuestas:
-2147483648 (INT_MIN) y -1
#include <stdio.h>
#include <limits.h>
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
int main() {
int r = f(INT_MIN, -1);
printf("%d\n", r);
return 0;
}
$ gcc -Wall division.c && ./a.out # => zsh: excepción de coma flotante ./a.out
La respuesta correcta ya está dada, pero inmediatamente pensé en Microsoft Pex .
Pex genera automáticamente conjuntos de pruebas con alta cobertura de código. Desde el editor de código de Visual Studio, Pex encuentra valores interesantes de entrada y salida de sus métodos, que puede guardar como un pequeño conjunto de pruebas con una alta cobertura de código. Microsoft Pex es un complemento de Visual Studio para probar aplicaciones .NET Framework
Después de agregar su rompecabezas en el sitio de sandbox, encuentra la respuesta en unos segundos, igual que la respuesta de eregons. (haga clic en preguntar pex)
Nota: lo hace en C #, pero el lenguaje no es realmente relevante.
(x/y)
y saber que INT_MIN
, -1
, 0
etc, son todos los casos de problemas de esa expresión, y tratar de aplicar ingeniería inversa a una manera de producir esos valores en el momento de la evaluación.