向二维vector存入输入时出现Segmentation Fault的原因是什么?
问题原因分析
核心触发点是二维vector越界访问
- 你定义的
vector<vector<int>> a默认是空容器,内部没有任何元素,此时a.size()的值为0。 - 原代码外层循环第一次执行到
a[i].push_back(val)时,i的值为0,直接访问a[0]相当于尝试读取空vector的第0个元素,属于非法内存访问,直接触发段错误。
修改后代码正常运行的逻辑
- 新版本外层循环中先创建临时一维vector
temp,把当前行的C个元素全部存入temp后,再调用a.push_back(temp)把整行插入二维vector中。这个操作会自动扩容a的容量,不存在提前访问a中不存在下标的情况,因此不会触发越界。
其他可行的修改方案
你也可以在初始化二维vector的时候就指定行数,原代码的读写逻辑也可以正常运行:
vector<vector<int>> a(R); // 初始化时就给a开辟R个空的一维vector元素
内容的提问来源于stack exchange,提问作者Akram ElectroTech
相关产品推荐
相关产品推荐

