2016-02-07 3 views
1

Я застрял на этой одной части, и я надеялся получить помощь. У меня есть проект, который в основном является поиском слов. Программа читает файл, содержащий строки и столбцы, за которыми следует головоломка поиска слов. Вы должны создавать возможные комбинации строк из поиска слов и проверять эти комбинации со словарем, который предоставляется в виде другого текстового документа.Вне границ Ошибка 2D-массива в C

Вот пример файла для чтения в 1 является Ряды и второй в Cols следуют головоломки слово для поиска:

4 4 
syrt 
gtrp 
faaq 
pmrc 

Так что я был в состоянии получить большую часть кода для работы функции, кроме который создает строки для вышеуказанного файла. В основном ему нужно искать словарный поиск и создавать строки, каждая созданная строка передается другой функции, чтобы проверить, находится ли она в словаре. Однако мой код продолжает выходить за рамки при создании строк, и он продолжает вызывать сбои Seg, которые действительно расстраивают.

Тезисов константа, объявленная, его все возможные направления идти при поиске поиска слова головоломки для возможных комбинаций строк

const int DX_SIZE = 8; 
const int DX[] = {-1,-1,-1,0,0,1,1,1}; 
const int DY[] = {-1,0,1,-1,1,-1,0,1}; 

Это функция, я должен создать строки:

int strCreate(char** puzzle, char** dictionary, int n, int rows, int col){ 

int x, y; 
int nextX, nextY, i; 
char str[20] = {0}; 
int length = 1; 

for(x = 0; x < rows; x++) 
    { 

    for(y = 0; y < col; y++) 
    { 

     //Grabs the base letter 
     str[0] = puzzle[x][y]; 
     length = 1; 
     for(i = 0; i < DX_SIZE; i++) 
     { 

      while(length < MAX_WORD_SIZE) 
      { 

      nextX = x + DX[i]*length; 
      nextY = y + DY[i]*length; 


      // Checking bounds of next array 
      //This is where I'm having trouble. 

      if((x + nextX) < 0 || (nextX + x) > (col-1)){ 
       printf("Out of bounds\n"); 
       break; 
      } 

      if((y + nextY) < 0 || (nextY + y) > (rows-1)){ 
       printf("Out of bounds\n"); 
       break; 
      } 

      str[length] = puzzle[nextX][nextY]; 


      //search for str in dictionary 
      checkStr(str, dictionary, n); 
      length++; 
      } 
      memset(&str[1], '\0', 19); 
     } 
     } 
    } 
return 0; 
} 

Я знаю, что я не проверяю границы правильно, я просто не могу понять, как это сделать. Когда X = 1 и nextX = -1, который проходит проверку границ, однако скажем, что массив находится в головоломке [0] [0], следующий X поставил бы головоломку [-1] [0], которая выходит за пределы, вызывающие ошибку seg.

Спасибо, что нашли время, чтобы прочитать, и я ценю любую помощь вообще.

+0

Я думаю, что приезд, предназначенный для DX и XY, выглядит хорошо. Не могли бы вы добавить более подробную информацию о том, как определяются головоломки и str? –

+0

Str определяется в верхней части функции. Головоломка объявляется с использованием динамического распределения памяти, используя строки и столбцы из файла, который читается. – Kris

+0

@Kris Пожалуйста, не удаляйте код из вопроса. Это заставляет ответ выглядеть полностью вне контекста. – vsoftco

ответ

1

nextX и nextY - это индексы, используемые для доступа к головоломке массива. Тогда проверка привязки массива должна также включать в себя то же самое. Но проверка привязки массива включает, например, x + nextX.

 // Checking bounds of next array 
     //This is where I'm having trouble. 

     if((x + nextX) < 0 || (nextX + x) > (col-1)){ 
      printf("Out of bounds\n"); 
      break; 
     } 

Пример: если (nextX < 0) Е ("вне границ ... \ п");

+0

Это фиксировало ошибку за пределами! Спасибо! Теперь, когда он работает, я пришел к выводу, что он не создает строки правильно>< – Kris

+0

Почему 'int length = 1;', а не '0'? –

Смежные вопросы