簡體   English   中英

給定程序中的細分錯誤

[英]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;
}

在這種特殊情況下,你還沒有調整了兩個向量ab

默認情況下,它們的大小為零。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM