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

为何二维vector的push_back方法在循环第二阶段停止工作?

二维vector输入时第二阶段崩溃的常见原因

以下是几种大概率导致你描述问题的原因及对应排查方向:

  • vector行索引越界
    若你的vect初始化时只分配了1行(例如vector<vector<int>> vect(1);),进入第二阶段(i=1)时直接使用vect[i]会触发未定义行为——vector的operator[]不做越界检查,此时访问的是不属于vect的内存区域,执行push_back时会直接导致程序崩溃。
    解决:进入第二阶段前,先为vect添加新行,比如vect.emplace_back();或vect.push_back(vector<int>());,确保i对应的行存在。

  • 数组访问越界
    如果你使用了固定大小的数组a(比如int a[10];),第二阶段循环时j的取值超出数组边界,访问a[j]会破坏内存结构,后续push_back操作会触发崩溃。另外,如果第一阶段循环结束后j未重置为初始值(如0),直接在第二阶段复用,也会导致j一开始就处于非法范围。
    建议:用vector<int>替代固定数组,或严格控制j的取值范围,每次循环前重置j。

  • 输入流状态异常
    若第二阶段输入的内容与预期类型不匹配(比如要输入整数却输入了字符串),cin会进入失败状态,后续输入操作会被跳过,看起来像程序终止。可在输入后检查cin状态:

    #include <limits> // 需要包含头文件
    // ...
    if (!(cin >> a[j])) {
        cin.clear(); // 重置输入流状态
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空缓冲区残留内容
        cout << "输入无效,请输入整数" << endl;
        j--; // 重新处理当前输入位置
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:33:23