C ошибка времени выполнения «Ошибка сегментации» - как ее убрать? - PullRequest
0 голосов
/ 16 октября 2019

Я не уверен, почему я получаю ошибку сегментации в моем коде. Однако я знаю, что это происходит в блоке while(*word == *grid_char). Я также пытаюсь удалить код в нем и посмотреть, что происходит, и я все еще получаю ошибку ошибки сегментации. Однако, если я удаляю этот цикл while полностью, ошибка исчезает.

Я знаю, что такое ошибка сегмента, но не могу понять, почему в этом случае возникает ошибка. Я также не знаю, как его отладить.

Вот мой код.

  char grid[(MAX_DIM_SIZE + 1) * MAX_DIM_SIZE + 1];
  char dictionary[MAX_DICTIONARY_WORDS * (MAX_WORD_SIZE + 1 ) + 1 ];
  int dictionary_idx[MAX_DICTIONARY_WORDS];

  char *grid_char;
  char *match_word;

  int grid_idx = 0;
  char *word = dictionary + dictionary_idx[0];
  int word_found = 0;
  int max_grid_height = row; // max y (max_grid_height) on grid
  int row = 0;
  int grid_clm = 0;

  // print_char(grid[18]);

  while (grid[grid_clm] != '\n')
  {
    row = 0;

    while(row < max_grid_height)
    {
      word = dictionary + dictionary_idx[0]; //first char from dictionary ***


      while(*word != '\0')
      {

        // print_char(*word);

        int match_row = row; // back to start point grid - using this to compare potential match
        match_word = word; // back to start point dict - using this to compare potential match

        grid_char = grid[grid_clm + max_grid_length*match_row];

        print_char(grid_char);
        print_char(*word);
        print_char(*(match_word+1));
        print_char(' ');

        while(*word == *grid_char)
        {
          match_row++;
          match_word++;

          if ((*match_word == '\n' || *match_word == '\0'))
          {
            print_char('F');
            continue;
          }
          if(match_row >= max_grid_height){
            break;
          }

          grid_char = grid[grid_clm + max_grid_length*match_row];
        }

        // next dictionary word
        while(*word != '\n' && *word != '\0'){
          word++;

        }
        if (*word == '\0'){
          break;
        }
        word++;
        // print_char(' ');

      }
      row++; //next grid row
    }
    grid_clm++; //next grid column
  }

1 Ответ

0 голосов
/ 16 октября 2019

Я думаю, что проблема заключается в инициализации указателя символа grid_char, вы назначаете значение символа вместо адреса памяти.

...