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

C++用户自定义数组冒泡排序运行触发段错误的问题排查

代码段错误原因说明

你给出的冒泡排序代码触发段错误的原因如下:

#include<iostream>
using namespace std;
int main(){
    int arr[40];
    int n;
    cout<<"Enter the size of array: \n";
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    for(int i=0;i<n;i++){
        cout<<"Entered value for array before sorting is "<<arr[i]<<"\t";
    }
    int counter = 1;
    while(counter < n){
        // 错误就出在这一行的for循环条件
        for (int i=0;counter<n;i++){
            if(arr[i]>arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        counter++;
    }
    for(int i=0;i<n;i++){
        cout<<"sorted array is "<<arr[i]<<"\t";
    }
}
  • 核心触发原因:内层for循环的终止条件写错。你把判断条件写为counter<n,这个值在单次内层循环执行过程中是固定不变的,会导致i无限自增,很快就超出数组的合法访问范围,访问非法内存直接触发段错误。
    正确的内层循环终止条件应该判断i的边界,不做优化的基础写法是i < n - 1,避免i+1越界;如果要优化减少重复比较,可以写为i < n - counter,每一轮冒泡都会把当前未排序部分的最大值放到末尾,不需要再比较已经排好的尾部元素。
  • 潜在风险:数组定义为固定长度40,若用户输入的n大于40,输入元素时就会越界写入数组,也会触发段错误。建议改用C++的vector<int>动态存储元素,或者在读取n后先判断n <= 40再执行后续逻辑。

修正后的可运行代码示例

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n;
    cout<<"Enter the size of array: \n";
    cin>>n;
    // 改用动态vector避免定长数组越界
    vector<int> arr(n);
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    cout<<"\nEntered value for array before sorting is: ";
    for(int i=0;i<n;i++){
        cout<<arr[i]<<"\t";
    }
    int counter = 1;
    while(counter < n){
        // 修正内层循环条件
        for (int i=0;i < n - counter;i++){
            if(arr[i]>arr[i+1]){
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        counter++;
    }
    cout<<"\nsorted array is: ";
    for(int i=0;i<n;i++){
        cout<<arr[i]<<"\t";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:15:03