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

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]都是数组的合法内存范围,访问它们是符合规则的。

修复建议

  1. 如果需要存储6个整数,直接把数组定义改为int a[6];,这样合法下标范围就是0到5,刚好对应6个元素;
  2. 更推荐使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:06:14