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
相关产品推荐
相关产品推荐

