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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:09:02