C-分割故障:11



我的功能可以通过数组中的许多匹配,并在比赛中找到所有球队,符合某些条件。当发现它们需要分配给新数组。新数组应用作输出参数。

我打电话时会得到segmentation fault: 11。我试图调试,但似乎无法明白为什么。以下声明为主要:

TEAM team_least_viewers;
double spectators = 99999;    
solve_task_four(round, team, &team_least_viewers, &spectators);

和功能本身:

void solve_task_four(ROUND *round, TEAM *team, TEAM *team_least_viewers, double *spectators) {
  int i, j, k = 0;
  for(i=0; i<ROUNDS_PR_SEASON; i++) { 
    for(j=0; j<MATCH_PR_ROUND; j++) {
      if(round[i].match[j].year == 2015) {
        /* Searching for team name in team[]*/
        for(k=0; k<NUMBER_OF_TEAMS; k++) {
          /* If it matches  */
          if (round[i].match[j].home_team == team[k].name) {
            team[k].spectators_home_last_year += round[i].match[j].spectators;
          }
        }
      }
    }
   for(k=0; k<NUMBER_OF_TEAMS; k++) {
     if(team[k].spectators_home_last_year < *spectators) {
        *spectators = team[k].spectators_home_last_year;
     }
   }
  }
}

根据要求的结构:

typedef struct {
  char weekday[WEEKDAY_SIZE], start_time[START_TIME_SIZE], 
       home_team[TEAM_SIZE], away_team[TEAM_SIZE];
  double spectators;
  int day, month, year, round, home_team_score, away_team_score;
} MATCH;
typedef struct {
  MATCH match[MATCH_PR_ROUND];
} ROUND;
typedef struct {
  char *name;
  int points, matches_played, 
      matches_won, matches_draw, matches_lost, 
      matches_won_home, matches_won_away,
      goals_for, goals_against, goal_difference;
  double spectators_home_last_year;
} TEAM;

任何帮助都是感谢。

我推断您的问题是:我如何弄清楚是什么原因导致分割错误?如果是正确的话,那么一个答案是使用调试器。另一个答案是在整个代码中添加打印语句。几乎可以肯定的是,segfault是阵列索引之一,例如圆形[i]或round [i] .match [j],因此请务必打印i和j值。您可能正在索引阵列的末端或取消指向零指针或非初始化的指针,因此请打印指针值,例如printf("round[%d] at %pn", i, &round[i])

在几个操作系统上的sigsegv是信号11,并在分割故障上传递到该过程。

当您的程序以不允许的方式访问内存时,会发生分割故障,通常是通过试图放置空指针或从数组的末端跑出。

在您的程序中,最有可能的罪魁祸首是数组索引,round[i].match[j]team[k]。(另一种可能性是,如果传递的spectator参数不是写作的有效位置,但是在这种情况下这不太可能。)您可能希望在调试器中插入代码/运行以检查每个访问是否正确。

特别是假设您的ROUNDS_PR_SEASON&amp; c。值正确,如果您的round数组未完全初始化,则某些round[i].match似乎很可能包含一个空。

相关内容

  • 没有找到相关文章

最新更新