C++代码中for循环后的代码被忽略且报0xC0000005错误是什么原因?
问题根因
返回码0xC0000005是Windows下典型的内存访问越界错误,问题出在第二个for循环的边界逻辑:
- 要统计连续两周的无雨天数,遍历的最大下标只能到
weeks-2,否则当i = weeks-1时,访问v[i+1]等同于访问超出数组边界的非法内存,直接触发程序崩溃,因此循环后的打印代码根本不会执行。 - 额外补充:你定义的
vector<int> v[weeks]属于C语言风格的变长数组(VLA),本身不符合C++标准规范,部分编译器可能支持但存在兼容性隐患,建议替换为标准的二维vector写法。
修正后的代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int weeks; cin >> weeks; vector<vector<int>> v(weeks); for (int i = 0;i < weeks; i++) { int a, b, c, d, e, f, g; cin >> a >> b >> c >> d >> e >> f >> g; v[i].push_back(a); v[i].push_back(b); v[i].push_back(c); v[i].push_back(d); v[i].push_back(e); v[i].push_back(f); v[i].push_back(g); } int mostdrydays = 0; int dryestweeks = 0; for (int i = 0; i < weeks - 1; i++) { int weeklydrydays = count(v[i].begin(), v[i].end(), 0); int nextweekdrydays = count(v[i+1].begin(), v[i+1].end(), 0); int biweeklydrydays = weeklydrydays + nextweekdrydays; if (biweeklydrydays > mostdrydays) { mostdrydays = biweeklydrydays; dryestweeks = i + 1; } } cout << "test2" << endl; cout << dryestweeks << endl; return 0; }
测试验证
你提供的输入示例中weeks=6,修正后循环会遍历i=0~4,对应1+2周、2+3周...5+6周的组合,计算后得到的结果符合预期输出2。
内容的提问来源于stack exchange,提问作者33lives
相关产品推荐
相关产品推荐

