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
相关产品推荐
相关产品推荐

