SIGSEGV,声明变量

时间:2017-09-23 03:07:39

标签: c++ arrays for-loop sigsegv

我收到此错误后,我将其缩小到字符串teamsTemp;线。我从阅读其他帖子中理解的是,这通常是由于没有声明变量。在这种情况下,当我声明一个变量时它会出错。即使其余的冒泡排序被注释掉,也会在该变量上引发错误。

#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 阿纳海姆天使 亚利桑那响尾蛇 亚特兰大勇士队 巴尔的摩金莺 波士顿美国人 波士顿勇士队 波士顿红袜队 布鲁克林道奇队 芝加哥小熊队 芝加哥白袜队 辛辛那提红人队 克利夫兰印第安人 底特律老虎队 佛罗里达马林鱼队 堪萨斯城皇家队 洛杉矶道奇队 密尔沃基勇士队 明尼苏达双城队 纽约巨人队 纽约大都会队 纽约洋基队 没有赢家 奥克兰运动家 费城竞技 费城费城人队 匹兹堡海盗 旧金山巨人队 圣路易斯红雀队 多伦多蓝鸟队 华盛顿参议员

世界系列赛冠军只是每年赢得世界系列赛的球队名单。

1 个答案:

答案 0 :(得分:2)

获胜者是一个大小为114的数组,但是i可以达到114,它可以访问元素115,它不在数组的末尾。

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

最重要的是,你至少有几个地方你正在读一个数组,但是你不清楚你是否将输入限制在数组的大小。