给定程序中的分段错误

0 c++ segmentation-fault

我经常遇到分段故障,即使我知道它是因为访问受限内存而发生的,我似乎也不知道如何纠正它.当我调用另一个函数时,我经常遇到它.

#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;
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 5

在这种特殊情况下,你有没有大小的两个向量ab.

它们默认构造为零大小.

vector<int> a(n);给你n个元素.做一个类似的改变b,一切都应该好.

[]用于访问其范围之外的向量的元素的行为是未定义的.

  • @Elried如果事先不知道大小,使用`push_back`(或`emplace_back`)是好的.否则,分配正确大小的向量然后只使用正常的数组索引更有效. (3认同)