gpt4 book ai didi

c++ - 合并排序代码中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:45 24 4
gpt4 key购买 nike

我已经用 C++ 编写了这个合并排序程序,但运行代码后出现“段错误(核心转储)”错误。即使没有编译错误。你能告诉我我做错了什么吗?在数组中获取输入时,它显示该错误。如果我将其更改为push_back,输入没问题,但稍后在合并函数中,它显示相同的错误。

//merging 2 sorted subarrays.
#include <iostream>
#include <vector>
using namespace std;

void merge(vector <int> &a,vector <int> &b,vector <int> &c)
{
int i=0,j=0,k=0,bL=b.size(),cL=c.size();
while(i<bL && j<cL)
{
if(b[i]<c[j])
{
a[k]=b[i];
i++;k++;
}
else
{
a[k]=c[j];
j++;k++;
}
}
while(i<bL)
{
a[k]=b[i];
i++;k++;
}
while(j<cL)
{
a[k]=c[j];
j++;k++;
}
cout<<"array a inside merge is: "<<endl;
for(int p=0;p<a.size();p++)
{
cout<<a[p]<<endl;
}

}
void mergeSort(vector <int> &a)
{
vector <int> l, r;
int mid;
if(a.size()<2) return;

mid = a.size()/2;
for(int i=0;i<mid;i++)
{
l[i]=a[i];
}
for(int i=mid;i<a.size();i++)
{
r[i-mid]=a[i];
}
mergeSort(l);
mergeSort(r);
merge(a, l, r);
}
int main()
{
int n;
vector <int> a;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
mergeSort(a);
for(int p=0;p<n;p++)
{
cout<<a[p]<<endl;
}
return 0;
}

最佳答案

无论何时使用 [] 访问 vector 中的元素,都可能会遇到段错误。这段代码,

vector <int> a;

给你一个空 vector 。

如果 a 中还没有任何内容,则请求 a[0] 将不起作用。尝试将 a[0] 设置为一个值也不起作用。它不存在。然而。

当您使用mergeSort时,您也会遇到类似的问题

vector <int> l, r;

这些也是空 vector 。

您可以使用push_back(甚至emplace_back)来添加新元素。或者使用constructor overload说明您想要多少个元素。例如,

vector <int> a(10);

给你一个由十个整数组成的 vector ,因此a[0]可以很好地读取或写入。a[11] 不是。

首先练习使用 vector ,然后尝试合并排序。

关于c++ - 合并排序代码中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50235988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com