【发布时间】:2014-06-21 06:59:26
【问题描述】:
在我的软件中,我在运行时使用来自用户的输入值并执行一些数学运算。为简单起见,请考虑以下示例:
int multiply(const int a, const int b)
{
if(a >= INT_MAX || B >= INT_MAX)
return 0;
else
return a*b;
}
我可以检查输入值是否大于限制,但是如何检查结果是否超出限制? a = INT_MAX - 1 和 b = 2 很有可能。由于输入完全有效,它将执行makes my program meaningless 的未定义代码。这意味着在此之后执行的任何代码都是随机的,最终可能导致崩溃。那么在这种情况下我该如何保护我的程序呢?
【问题讨论】:
-
对于“如何预防 UB?”没有一般的答案。对于这种特殊情况:stackoverflow.com/questions/2713972/…
-
在这种特殊情况下,将两者都转换为
long long并检查乘法的结果是大于INT_MAX还是小于INT_MIN通常应该可以工作。 -
(a >= INT_MAX)等价于(a == INT_MAX)如果 a 是 int -
@Cool_Coder
But how will documenting the error help?如果用户没有阅读文档,那是他们的问题,而不是你的问题。