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

C++中操作vector的代码输出全部为0与预期不符是什么原因?

问题原因

核心原因是std::vector下标访问越界,触发了C++标准定义的未定义行为:

  • C++中std::vector的下标从0开始计数,push_back()操作会将新元素追加到容器末尾,新元素对应的下标等于插入前容器的size值。
  • 循环逻辑中i从1到10依次执行:
    • 第一次循环i=1,push_back执行后容器size为1,只有下标0是合法访问范围,此时访问g1[1]已经越界
    • 后续每次循环i的值都会比当前容器的最大合法下标大1,直到循环结束所有的下标访问都是非法越界操作
  • 未定义行为的表现是不确定的,你当前运行环境刚好读取到的越界内存值都是0,所以输出全0,其他运行环境下可能出现程序崩溃、输出乱值等不同结果。

修复方案

有两种简单的修复方式:

  • 调整访问的下标为合法值,将打印行改为:
    cout << g1[i-1] << " ";
  • 直接读取容器末尾的最新插入元素,不需要手动计算下标:
    cout << g1.back() << " ";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:03