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

反转数组代码出现Segmentation fault问题,如何解决?

问题分析与修复方案

原代码的核心问题

  • 数组定义逻辑错误:在读取n之前就用int arr[n];声明数组,此时n是未初始化的垃圾值,数组大小完全随机。而且C++标准并不支持这种变长数组(VLA),属于编译器非标准扩展,兼容性极差。
  • 下标越界访问:反转输出的循环从i = n+1开始,数组的合法下标范围是0到n-1,访问arr[n]、arr[n+1]属于越界操作,直接触发段错误(Segmentation fault)。

修复后的代码

推荐使用C++标准容器vector来存储数组,既安全又符合标准:

#include <iostream>
#include <vector>
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<int> arr(n); // 先读n,再创建大小为n的vector
    for (int j = 0; j < n; j++) {
        cin >> arr[j];
    }
    // 从最后一个元素开始遍历到第一个元素
    for (int i = n-1; i >= 0; i--) {
        cout << arr[i] << " ";
    }
    return 0;
}

如果一定要用原生数组,可以用动态内存分配(注意要手动释放内存):

#include <iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    int* arr = new int[n]; // 动态分配数组
    for (int j = 0; j < n; j++) {
        cin >> arr[j];
    }
    for (int i = n-1; i >= 0; i--) {
        cout << arr[i] << " ";
    }
    delete[] arr; // 释放动态分配的内存
    return 0;
}

额外说明

  • 用vector无需手动管理内存,是C++中处理动态大小数组的首选方式。
  • 循环遍历反转数组时,必须严格遵守下标范围:数组的第一个元素下标是0,最后一个是n-1,越界访问会直接导致内存错误。

内容的提问来源于stack exchange,提问作者Alisha Kabeer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:57:09