Quelles valeurs de x et y provoqueront un crash avec certains compilateurs C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Quelles valeurs de x et y provoqueront un crash avec certains compilateurs C?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Réponses:
-2147483648 (INT_MIN) et -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: exception à virgule flottante ./a.out
La bonne réponse est déjà donnée, mais j'ai immédiatement pensé à Microsoft Pex .
Pex génère automatiquement des suites de tests avec une couverture de code élevée. Dès l'éditeur de code Visual Studio, Pex trouve des valeurs d'entrée-sortie intéressantes de vos méthodes, que vous pouvez enregistrer en tant que petite suite de tests avec une couverture de code élevée. Microsoft Pex est un complément Visual Studio pour tester les applications .NET Framework
Après avoir ajouté votre puzzle dans le site sandbox, il trouve la réponse en quelques secondes, la même que la réponse eregons. (cliquez sur demander pex)
Remarque: il le fait en C #, mais le langage n'est pas vraiment pertinent.
(x/y)
et savoir que INT_MIN
, -1
, 0
etc. sont tous les cas de problème pour cette expression, et essayer de désosser une façon de produire ces valeurs au moment de l' évaluation.