如何检测 C/C++ 中的整数溢出?


唯一安全的方法是在整数溢出发生之前检查溢出。然而,有些取巧的方法可以用来检查整数溢出。因此,如果你想检测无符号 int 相加时出现的溢出,你可以检查结果是否实际小于被加的任何一个值。例如,

示例代码

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

这是因为如果 x 和 y 都是无符号 int,如果相加并溢出,它们的数值不可能大于其中任何一个值,因为它需要大于最大的可能无符号 int 值才能环绕并超过这些值。

另一种方法是尝试访问 CPU 中的溢出标志。一些编译器允许访问溢出标志,你可以对其进行测试,但这不是标准。

更新于: 2019 年 7 月 30 日

307 次浏览

职业起航

完成课程获取认证

开始学习
广告