2011-12-25 70 views
2

我是解決問題 https://www.spoj.pl/problems/ACPC11A/SIGSEGV上提交

這裏是我的代碼:

#include<iostream> 
#include<cstdio> 
#include<string> 
#include<vector> 

using namespace std; 

int main() 
{ 
int tc,i,n; 
scanf("%d",&tc); 
while(tc--) 
{ 
    vector<string> v1,v2; 
    string str,w; 
    scanf("%d",&n); 
    int flag=0; 
    for(i=0;i<n;i++) 
    { 
     cin>>str; 
     if(str[0]!='#') 
     { 
      flag=1; 
      w=str; 
     } 
     else if(flag==0) 
     { 
      v1.push_back(str); 
     } 
     else 
      v2.push_back(str); 
    } 
    //print v2-->w-->v1 
    for(i=0;i<v2.size();i++) 
    { 
     cout<<v2[i]<<" "; 
    } 
    if(w!="") 
    cout<<w<<" "; 
    for(i=0;i<v1.size()-1;i++) 
     cout<<v1[i]<<" "; 
    cout<<v1[v1.size()-1]<<endl; 
    v1.clear();v2.clear();str.clear();w.clear(); 
} 
return 0; 
} 

我得到的樣品測試情況下,正確的輸出...但我提交的代碼提供分段故障。

我的邏輯是簡單.. 我把2個載體1用於存儲字的英語單詞到達之前(V1)和另一個用於英語單詞之後存儲的世界到來(V2) 之後,我打印V2的內容,隨後通過單詞,然後是v1的內容。

請幫我理解爲什麼這段代碼給出了段錯誤。

+2

不信任的網站.......不開放 – 2011-12-25 15:54:37

回答

4

不打擾你們...我得到了我的錯誤

錯誤是本着for(i=0;i<v1.size()-1;i++)

v1.size()0,然後根據尺寸()返回無符號值...因此0-1會很大的價值,因此SIGSEGV