我用c ++编写了这个合并排序程序,但运行代码后出现“Segmentation fault(core dumped)”错误。即使没有编译错误。你能告诉我我在做什么错吗?在数组中输入时,它显示错误。如果我将其更改为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;
}
答案 0 :(得分:1)
使用[]
访问向量中的元素时,可能会出现seg错误。
这段代码,
vector <int> a;
给你一个空矢量。
如果a[0]
中没有任何内容,请求a
将无效。
尝试将a[0]
设置为值也不起作用。
它不存在。
爱好。
使用
时,mergeSort
出现类似问题
vector <int> l, r;
这些也是空载体。
您可以使用push_back
(甚至emplace_back
)添加新元素。
或者使用constructor overload来说明您想要的元素数量。
例如,
vector <int> a(10);
为您提供了十个整数的向量,因此a[0]
可以读取或写入。
a[11]
不是。
首先练习使用矢量然后尝试合并排序。
答案 1 :(得分:0)
获得分段错误的原因是您访问了不存在的内存位置(更准确地说是未分配)。假设您有一个长度为3的向量,并且您尝试访问第4个位置,则会出现分段错误。
与@ doctorlove的答案相反,我会说可以使用[]
。但是,您需要以下实现(仅针对main()
显示,请在其他函数中使用相同的逻辑实现)。有关详细信息,请参阅std::vector
的文档。
int main()
{
size_t n;
std::cin >> n;
std::vector <int> a(n);
for(int i=0;i<n;++i)
{
std::cin >> a[i];
}
// mergeSort(a);
for(int i=0;i<n;++i)
{
std::cout << a[i] << "\n";
}
return 0;
}
希望这会有所帮助。欢呼声。
答案 2 :(得分:0)
这是更改后的最终代码:
$("#container").on("click", "li", function(e) {
var links = [];
$(this).find("img").each(function() {
links.push($(this).attr("src"));
});
console.log(links);
});