You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++静态分析工具漏检数组越界问题排查与工具咨询

C++静态分析工具数组越界漏报问题

问题现象

我们使用Klocwork 2021.1版本进行C++静态分析,多名同事反馈工具存在*漏报(False Negative)*情况。将问题简化为如下测试代码:

int theIndex = 40;

int main()
{
  int arr[10] = {0,1,2,3,4,5,6,7,8,9};
  return arr[theIndex];
}

这段代码存在明确的数组越界访问(下标40远大于数组长度10),但Klocwork未报告该缺陷。

补充测试:CppCheck和SonarQube同样未能检测出这个问题!

但测试以下代码时,工具却能正常检测出数组越界:

int main()
{
  int theIndex = 40;
  int arr[10] = {0,1,2,3,4,5,6,7,8,9};
  return arr[theIndex];
}

我推测Klocwork未将main()视为唯一入口,因此假设全局变量theIndex可能在main()调用前被修改。

另外测试了如下版本:

int theIndex;

int foo() {
  const int arr[10] = {0,1,2,3,4,5,6,7,8,9};
  return arr[theIndex];
}

int main()
{
  theIndex = 40;
  return foo();
}

CppCheck判定这段代码“无bug”。

疑问列表

  • 是否是工具配置有误?
    • 应如何调整配置?
  • Klocwork是否应当检测出该问题,还是这属于静态分析工具的局限性?
  • 是否有能检测此类问题的优质工具?

补充说明

正如推测的那样,静态分析工具认为其他编译单元可能修改theIndex的值,因此未报告问题。将其声明为static int theIndex = 40时,工具就能检测到该问题。

新疑问

Klocwork已获取完整构建规格,理论上可以追踪软件的所有分支及theIndex的可能取值(这可能存在计算局限性):

  • 是否有方法指示工具进行此类追踪?
    • 类似“链接阶段”的分析?

内容的提问来源于stack exchange,提问作者Tomer W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:55:19