gpt4 book ai didi

c - 检测 C 中的算术溢出

转载 作者:太空宇宙 更新时间:2023-11-03 23:22:49 25 4
gpt4 key购买 nike

  1. 如标题所示,C 中是否有检测此类错误的方法?例如,如果我尝试像 int a=b*c+d*e/f; 这样的复杂计算,我能否检测到结果是否超出了 int 的范围?

  2. 假设我决定以性能损失为代价处理此类错误,安全隐患是什么?最坏的情况是什么?恶意软件作者能否利用此漏洞?

最佳答案

unsigned int 的更简单情况下,您可以像这样在乘法之前测试溢出

#include <stdio.h>
#include <limits.h>

void multiply(unsigned a, unsigned b)
{
if(UINT_MAX / a >= b)
printf("%u * %u = %u\n", a, b, a * b);
else
printf("%u * %u is out of range\n", a, b);
}

int main(void)
{
multiply(70000, 60000);
multiply(70000, 80000);

return 0;
}

程序输出:

70000 * 60000 = 4200000000
70000 * 80000 is out of range

并且您可以对 int

进行更广泛的测试

关于c - 检测 C 中的算术溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34729755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com