给定程序中的分段错误
Segmentation Fault in the given Program
我经常遇到段错误,尽管我知道它是由于访问受限内存而发生的,但我似乎不知道如何纠正它。
我通常在调用另一个函数时遇到它。
#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;
}
在这种特殊情况下,您没有调整 您的两个向量a
和b
。
默认情况下,它们的大小为零。
vector<int> a(n);
给你 n 个元素。对 b
进行类似的更改,一切都会好起来的。
使用 []
访问其范围外的向量元素的行为未定义。
您不能使用向量索引或 []
除非您已经通过声明大小或 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;
}
我经常遇到段错误,尽管我知道它是由于访问受限内存而发生的,但我似乎不知道如何纠正它。 我通常在调用另一个函数时遇到它。
#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;
}
在这种特殊情况下,您没有调整 您的两个向量a
和b
。
默认情况下,它们的大小为零。
vector<int> a(n);
给你 n 个元素。对 b
进行类似的更改,一切都会好起来的。
使用 []
访问其范围外的向量元素的行为未定义。
您不能使用向量索引或 []
除非您已经通过声明大小或 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;
}