Welche Werte von x und y verursachen bei einigen C-Compilern einen Absturz?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Welche Werte von x und y verursachen bei einigen C-Compilern einen Absturz?
int f(int x, int y) {
return (y==0) ? 0 : (x/y);
}
Antworten:
-2147483648 (INT_MIN) und -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: Gleitkomma-Ausnahme ./a.out
Die richtige Antwort ist bereits gegeben, aber ich habe sofort an Microsoft Pex gedacht .
Pex generiert automatisch Testsuiten mit hoher Codeabdeckung. Direkt im Visual Studio-Code-Editor findet Pex interessante Eingabe-Ausgabe-Werte Ihrer Methoden, die Sie als kleine Testsuite mit hoher Codeabdeckung speichern können. Microsoft Pex ist ein Visual Studio-Add-In zum Testen von .NET Framework-Anwendungen
Nachdem Sie Ihr Puzzle in der Sandbox-Site hinzugefügt haben , findet es die Antwort in wenigen Sekunden, genau wie die Antwort von Eregons. (Klicken Sie auf Ask Pex)
Hinweis: Dies geschieht in C #, aber die Sprache ist nicht wirklich relevant.
(x/y)
und wissen , dass INT_MIN
, -1
, 0
usw. sind alle Problemfälle für diesen Ausdruck, und versuchen , einen Weg Reverse Engineering diese Werte zum Zeitpunkt der Auswertung zu erzeugen.