2014-04-14 167 views
-1

我是C++的初學者。這是我的代碼。它在代碼塊中正常工作,但是當我將它提交給codechef時,它顯示運行時錯誤(SIGSEGV)。請幫忙!分段錯誤(SIGSEGV)

#include<iostream> 

using namespace std; 

int main() 
{ 
    long int n, m, x, temp, B1 = 0, B2 = 0; 
    long int arr[105]; 

    cin >> n >> m; 

    for(int i = 1; i <= n; i++) 
     cin >> arr[i]; 
    while(m--) 
    { 
     B1 = B2 = 0; 
     cin >> x; 
     temp = 1; 

     while(temp < x) 
      if((arr[x] - arr[temp]) > 0) 
       B1 = B1 + (arr[x] - arr[temp++]); 
      else 
       B2 = B2 + (arr[x] - arr[temp++]); 
     cout << B1 - B2 << endl; 
    } 
} 
+2

爲什麼不閱讀教程,如果你是初學者? –

+1

你沒有顯示你的輸入。如果你把一些cerr <<「temp」<< temp <<「,x」<< x <<'\ n';風格的痕跡,你可以自己工作。使用vector和at()可以讓您在有效索引之外索引時發現異常 - 在學習時更安全。 –

回答

5

對於大小爲N的陣列,有效的索引是0和N-1之間。

更改此:

for(int i=1;i<=n;i++) 

要這樣:

for(int i=0;i<n;i++) 

順便說一句,你沒有指定你的程序的目的,但我猜你應該改變temp=1temp=0以及...