我经常遇到分段故障,即使我知道它是因为访问受限制的内存而发生的,我似乎也不知道如何纠正它。 当我打电话给另一个功能时,我经常遇到它。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
long int xyz(int n)
{
vector<int> a;
vector<int> b;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
cin>>b[i];
}
long int sum=0;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
sum=sum+((a[j]-a[i])*max(b[i],b[j]));
}
}
return sum;
}
int main()
{
int n;
long int final;
cin>>n;
for(int i=0;i<n;i++)
{ int n;
cin>>n;
final=xyz(n);
cout<<final<<endl;
}
return 0;
}
答案 0 :(得分:5)
在这种特殊情况下,您没有 您的两个向量a
和b
。
默认情况下,它们的大小为零。
vector<int> a(n);
为您提供了n个元素。对b
进行类似的更改,一切都应该很好。
使用[]
访问其范围之外的向量元素的行为未定义。
答案 1 :(得分:0)
您无法使用向量索引或[]
,除非您已通过声明大小或vec.push_back()
方法初始化该索引!
请参阅这两段代码以获得澄清
此代码不会运行(分段错误):
int main()
{
vector<int> a; //not initialized so cant be indexed directly
cin>>a[0];
cout<<a[0];
return 0;
}
这部分没有问题:
int main()
{
vector<int> a(5); //size initialized upto 5, so if indexed at a point greater than 4 it will be error
cin>>a[0];
cout<<a[0];
return 0;
}
注意:如果您使用vec.at()
运算符,则可以看到正在打印的新类型错误,该错误可能意味着相同!
试试这个错误的代码:
int main()
{
vector<int> a;
cin>>a.at(0);
cout<<a.at(0);
return 0;
}