gpt4 book ai didi

c - 如何在 C 程序中查找(所有)整数溢出?

转载 作者:太空狗 更新时间:2023-10-29 16:34:23 28 4
gpt4 key购买 nike

我正在从事一个大型项目,该项目通常运行良好,但一旦输入数据大小超过某些限制就会出现严重问题。

这些问题(怀疑)只是由于像这样的有符号整数溢出:

int a, o;
// Initialize a and o
int x = (a+o) >> 1);

显然,一旦 a 和 o 的和溢出(大于 2^31-1),x 不再是 a 和 o 的平均值。

是否有通用的方法来查找正在运行的程序中的所有这些整数溢出?

我正在考虑像 Valgrind 或 GDB 扩展这样的工具,它在每个整数算术指令处中断,获取参数并将正确结果(使用更大的数据类型或任意精度算术计算)与实际结果进行比较。如果结果不同,它应该输出警告、触发调试中断或类似的东西。

我知道,如何检查单个算术指令是否溢出(例如检查加法符号),但是由于代码量很大,我无法通过整个项目插入检查代码到处都是手工。

最佳答案

对于大型代码库,Coverity 是一个很好的工具。我不确定它是否会检测到所有 整数溢出,但值得一试。

关于c - 如何在 C 程序中查找(所有)整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594414/

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