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

vector下标越界原因排查:简易加法C++程序运行报错问题

嘿,我来帮你揪出这个导致vector下标越界的bug!你的代码里有两个关键问题,咱们一个个说清楚:

1. 错误使用sizeof()获取vector的元素数量

这是触发下标越界的核心原因!你在for循环里写了y < sizeof(i),但sizeof()的作用是获取变量/类型在内存中占用的字节数,而不是vector里存储的元素个数。

举个实际的例子:在64位系统上,std::vector对象本身的大小通常是24字节左右(不管你存了1个还是100个元素)。假设你往vector里存了3个整数,sizeof(i)返回的还是24,这时候循环会从y=0一直跑到y=23,而你的vector只有3个元素,当y≥3时,i[y]就会访问到vector范围外的内存,直接触发“下标越界”错误。

正确的做法是用vector自带的size()成员函数,它会准确返回容器里实际的元素个数:

for (y; y < i.size(); y++) {
    sum = sum + i[y];
}
2. 输入结束条件的小陷阱:input != 0000

你可能想通过输入0000(四个0)来终止循环,但在C++里,数字开头的0表示这是八进制数,0000其实等价于十进制的0。也就是说,只要你输入单个0,循环就会停止,而不是输入四个0。

如果确实需要用户输入四个0才结束,你得把输入当作字符串处理,比如:

std::string input_str;
while (std::cin >> input_str && input_str != "0000") {
    int input = std::stoi(input_str);
    numbers.push_back(input);
}

如果只是想输入单个0结束,那把条件改成input != 0就可以了。

额外的优化小建议
  • 变量名尽量起得有意义,比如把std::vector<int> i;改成std::vector<int> numbers;,int y;改成int index;,代码可读性会高很多。
  • 可以用更简洁的范围for循环来求和,不用手动管理下标:
for (int num : numbers) {
    sum += num;
}

最后给你一份修正后的完整代码参考:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> numbers;
    int input;
    int sum = 0;
    // 这里用输入0结束循环,如果你需要四个0结束,换成上面的字符串处理逻辑
    while (std::cin >> input && input != 0) {
        numbers.push_back(input);
    }
    // 范围for循环求和
    for (int num : numbers) {
        sum += num;
    }
    std::cout << sum << std::endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:58:10