为何我的C++程序访问vector元素时运行报错?
问题分析与解决:C++ Vector运行时错误
你这段代码编译通过但运行报错的核心原因是访问了空vector的越界元素。
默认构造的std::vector<int> a;是一个空容器,它的size()为0,不存在索引为0的元素。operator[]访问vector时不会做越界检查(这是它和at()方法的关键区别),所以编译阶段不会报错,但运行时会触发未定义行为,导致程序崩溃或抛出错误。
修复方案
有两种常见的合法处理方式:
方式一:初始化时指定vector的大小
修改vector的定义,直接创建包含指定数量元素的容器:std::vector<int> a(1); // 创建含1个int元素的vector,默认初始值为0此时容器内存在索引为0的元素,后续赋值和访问操作均合法。
方式二:先添加元素再访问
通过push_back方法先向vector中添加元素,再进行索引访问:std::vector<int> a; a.push_back(0); // 向容器末尾添加一个元素 a[0] = 10; // 此时访问索引0合法
修复后完整代码示例
以方式一为例,修改后的代码如下:
#include <iostream> #include <vector> int main(){ std::vector<int> a(1); a[0]= 10; std::cout << a[0] << std::endl; a[0]= a[0]*10+5; std::cout << a[0] << std::endl; }
内容的提问来源于stack exchange,提问作者Aqdas Rafat Khan
相关产品推荐
相关产品推荐

