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

Cppcheck误报vector越界?含两元素初始化容器被判定为空

Cppcheck 2.12对vector下标访问的误报问题解答

问题场景

编写的测试代码如下:

#include <vector>
#include <iostream>

using namespace std;

int main() {
    vector<double> arr {0, 0.1};
    cout << arr.size() << endl;
    cout << arr[0] << endl;
}

代码编译运行正常,输出2和0,但使用Cppcheck 2.12版本检测时,出现错误提示:

error: Out of bounds access in expression 'arr[0]' because 'arr' is empty. [containerOutOfBounds]
 cout << arr[0] << endl;
            ^

结论

这确实是Cppcheck 2.12版本的误报。

分析

代码通过列表初始化vector<double> arr {0, 0.1};明确为vector初始化了2个元素,运行时的输出也证明容器非空,下标[0]的访问完全合法。

Cppcheck 2.12的静态分析逻辑在处理这种列表初始化的vector时存在疏漏,没能正确识别初始化操作后容器的实际元素数量,错误判定该vector为空容器,进而触发了containerOutOfBounds的错误提示。

这类静态分析工具的误报在旧版本中并不罕见,后续更新的Cppcheck版本大概率已经修复了这个问题,你可以尝试升级到最新版本后重新检测这段代码。

内容的提问来源于stack exchange,提问作者Mikhail Kriseev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:46:22