2017-09-23 106 views
-1

我收到這個錯誤我把它縮小到字符串teamsTemp;線。我通過閱讀其他帖子瞭解到的情況通常是由於沒有聲明變量而導致的。在這種情況下,當我聲明變量時會出錯。即使將其餘的冒泡排序註釋掉,它也會在該變量上引發錯誤。SIGSEGV,聲明一個變量時的分段錯誤錯誤

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 


int main() 
{ 
    ifstream WinnersIn;  
    ifstream TeamsIn;   
    ifstream LeagueIn;   
    string inputWinner; 
    string inputTeam; 
    string inputLeague; 
    int wins[30] = {0}; 
    string teams[30]; 
    string winner[114]; 
    string league[30]; 
    int t = 0; 
    int w = 0; 
    int z = 0; 
    int year = 1903; 
    int j; 

    TeamsIn.open("Teams.txt"); 
    LeagueIn.open("Leagues.txt"); 
    WinnersIn.open("WorldSeriesWinners.txt"); 

    //Saving teams into an array 
    while (getline(TeamsIn, inputTeam)) 
    { 
     teams[t] = inputTeam; 
     t++; 
    } 

    //Saving Winners into an array 
     while (getline(WinnersIn, inputWinner)) 
    { 
     winner[w] = inputWinner; 
     w++; 
    } 

    //Saving division Winner names into an array 
     while (getline(LeagueIn, inputLeague)) 
    { 
     league[z] = inputLeague; 
     z++; 
    } 

    //Nested for loop to match winning team and their league then output 
    for (int i=0; i < 115; i++) 
    { 
     for (z=0; z < 30; z++) 
     { 
      if (winner[i] == teams[z]) 
      { 
       cout << year << " " << winner[i] << " " << league[z] << endl; 
       year++; 
      } 
     } 
    } 

    //Saving number of wins for each team into an array 
    for (int i = 0; i < 115; i++) 
    { 
     for (z=0; z < 30; z++) 
     { 
      if (winner[i] == teams[z]) 
      { 
       wins[z] = wins[z] + 1; 
      } 
     } 
    } 


    //Sorting by number of wins 
    for (int i = 0; i < 29; i++) 
    { 
     for (int j = 0; j < 30; j++) 
     { 
      if (wins[i] < wins[j]) 
      { 
       int winsTemp; 
       string teamsTemp; 

       /*winsTemp = wins[i]; 
       wins[i] = wins[j]; 
       wins[j] = winsTemp; 

       teamsTemp = teams[i]; 
       teams[i] = teams[j]; 
       teams[j] = teamsTemp;*/ 
      } 
     } 
    } 

    TeamsIn.close(); 
    LeagueIn.close(); 
    WinnersIn.close(); 

    return 0; 
} 

leagues.txt 美國聯盟 國家聯盟 國家聯盟 美國聯盟 美國聯盟 國家聯盟 美國聯盟 國家聯盟 國家聯盟 美國聯盟 國家聯盟 美國聯盟 美國同盟 全國聯賽 美國聯賽 全國聯賽 國家聯盟 美國聯盟 國家聯盟 國家聯盟 美國聯賽 沒有贏家 美國聯盟 美國聯盟 國家聯盟 國家聯盟 國家聯盟 國家聯盟 美國聯盟 美國聯賽

teams.txt 阿納海姆天使 亞利桑那響尾蛇 亞特蘭大勇士 巴爾的摩金鶯 波士頓美國人 波士頓勇敢 波士頓紅襪 布魯克林道奇隊 芝加哥小熊 芝加哥白襪隊 辛辛那提紅人隊 克利夫蘭印第安人 底特律老虎 佛羅里達馬林魚 堪薩斯城皇家隊 洛杉磯道奇隊 密爾沃基勇敢 明尼蘇達雙城 紐約巨人 紐約大都會隊 紐約洋基隊 沒有冠軍 奧克蘭田徑隊 費城田徑隊 Philadelph IA費城 匹茲堡海盜 舊金山巨人隊 聖路易紅雀 多倫多藍鳥隊 華盛頓參議員

世界系列獲獎者僅僅是一個每年都贏得了世界系列賽的球隊名單。

回答

2

優勝者是一個大小爲114的數組,但是i可以上升到114,它可以訪問數組115末端的元素115。

 if (winner[i] == teams[z]) 

最重要的是你有,你正在閱讀到一個數組至少幾個地方,但目前還不清楚,你限制你的輸入數組的大小。

+0

我有我的數組大小聲明在114加0 =一個可以容納115個字符串的數組。 for循環表示在我小於115的時候運行,所以它只會到114.另外,只要我將冒泡排序註釋掉就可以正常運行,它就是代碼塊中的東西。 –

+0

@GarrettPenfield'字符串優勝者[114];'分配一個可以容納114個元素的數組。索引0至113有效。它不*保存115件事情。如果部分代碼與您的問題無關,那麼您沒有發佈[mcve],並應調整您的問題,重點放在「最小」部分 – xaxxon