C++程序遍历数组最后一个元素时崩溃问题咨询
数组越界导致的崩溃问题解析
嘿,这个坑我刚学C++的时候也踩过!咱们一步步把问题说清楚:
核心误解纠正
你搞错了数组定义的规则:在C++里,int a[5];表示的是一个包含5个整数元素的数组,而非6个。下标从0开始的意思是,这5个元素的合法下标范围是0到4——从a[0]到a[4]刚好是5个元素,完全对应数组的定义长度。
崩溃的根本原因
当你尝试输出第6个整数时,实际上是在访问a[5],这已经属于数组越界访问,是C++里典型的未定义行为:
- 数组在内存中是连续的一块空间,
a[5]已经跑到了数组分配的内存区域之外; - 这片“越界”的内存可能不属于你的程序,或者被其他变量、系统数据占用;
- 读写不属于自己的内存会触发操作系统的内存保护机制,直接导致程序崩溃。
你前5个元素输出正常,是因为a[0]到a[4]都是数组的合法内存范围,访问它们是符合规则的。
修复建议
- 如果需要存储6个整数,直接把数组定义改为
int a[6];,这样合法下标范围就是0到5,刚好对应6个元素; - 更推荐使用C++标准库的
std::vector<int>来替代原生数组,它不仅能自动管理内存,还可以通过at()方法进行带边界检查的访问——如果越界会直接抛出异常,比原生数组的崩溃更容易排查问题。比如:
#include <vector> #include <iostream> int main() { std::vector<int> a(6); // 读取6个整数 for (int i = 0; i < 6; ++i) { std::cin >> a[i]; } // 输出6个整数 for (int num : a) { std::cout << num << " "; } return 0; }
内容的提问来源于stack exchange,提问作者Dastan
相关产品推荐
相关产品推荐

