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

C++中二维vector赋值时进入第二层循环就崩溃是什么原因?

问题根因

你初始化的vector<vector<int>> A是完全未分配存储空间的空二维vector,外层没有预留n行的元素空间,每行内部也没有预留n个int的存储空间。直接通过A[i][j]赋值属于非法越界访问未申请的内存,触发C未定义行为,会直接导致程序崩溃,和你进入第二层循环就停止运行的现象完全吻合。
C
的vector的[]运算符默认不会做越界校验,越界访问绝大多数场景会直接触发段错误终止程序。

修复方案

有两种常用的修复方式可选:

  • 初始化时直接指定二维vector的尺寸
    定义阶段就提前开辟n行n列的存储空间,后续可直接用下标赋值:
    // n为方阵阶数,直接初始化n行,每行是n个元素的一维vector
    vector<vector<int>> A(n, vector<int>(n));
    
    后续你原来的赋值循环不需要修改就可以正常运行。
  • 动态push_back添加元素
    不提前预留空间,每构造完一行就加入外层vector:
    vector<vector<int>> A;
    for (int i = 0; i < n; i++)
    {
        vector<int> row;
        for (int j = 0; j < n; j++)
        {
            int val = rand() % 10;
            row.push_back(val);
            cout << val << " ";
        }
        A.push_back(row);
        cout << endl;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:39:02