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

C++归并排序代码报错求助:段错误与运算符不匹配问题排查

归并排序代码错误分析与修复

错误点1:语法破坏导致编译失败

在merge函数的int left=low;行末尾,存在多余的无效代码`enter code here`,这会直接违反C++语法规则,引发本地编译时的运算符不匹配错误。

错误点2:容器越界触发段错误

main函数中初始化的vector<int> arr是空容器,未分配任何内存空间。直接使用arr[i]读取输入会访问未分配的内存区域,导致在线运行时出现Segmentation error。

修正后的完整代码

#include <bits/stdc++.h>
using namespace std;

void merge(vector<int> &arr, int low, int mid, int high){
    vector<int> temp;
    int left=low;
    int right=mid+1;
    while (left<=mid && right<=high)
    {
        if(arr[left]<=arr[right]){
            temp.push_back(arr[left]);
            left++;
        }
        else{
            temp.push_back(arr[right]);
            right++;
        }
    }
    while(left<=mid){
        temp.push_back(arr[left]);
            left++;
    }
    while(right<=high){
        temp.push_back(arr[right]);
        right++;
    }
    for(int i=low;i<=high;i++){
        arr[i]=temp[i-low];
    }
}

void mS(vector<int> &arr, int low, int high){
    if(low>=high) return;
    int mid=(low+high)/2;
    mS(arr, low, mid);
    mS(arr, mid+1, high);
    merge(arr, low, mid, high);
}

void mergeSort(vector<int> &arr, int n){
    mS(arr, 0, n-1);
}
int main()
{
    int n;
    cin >> n;
    vector<int> arr(n); // 预先分配n个元素的空间
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    mergeSort(arr, n);
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:23:35