[英]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()
方法初始化了該索引,否則不能使用vector或[]
索引!
請參考這兩段代碼以進行澄清
此代碼將不會運行(分段錯誤):
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.