C中超出界限的2D数组错误

时间:2016-02-07 02:32:45

标签: c arrays string

我坚持这一部分,我希望得到一些帮助。我有一个基本上是单词搜索的项目。该程序读入一个文件,其中包含行和列,后跟单词搜索拼图本身。您需要从单词搜索中创建可能的字符串组合,并使用作为另一个文本文档提供的字典检查这些组合。

以下是第1个读取的文件的行示例,第2个是Cols,后跟单词搜索难题:

4 4
syrt
gtrp
faaq
pmrc

所以除了为上面文件创建字符串的函数之外,我已经能够使大部分代码工作。基本上它需要搜索wordsearch并创建字符串,每个创建的字符串都会传递给另一个函数来检查它是否在字典中。然而,在创建字符串时,我的代码仍然不受限制,并且它继续导致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] nextX将拼图[-1] [0]超出范围导致seg故障。

感谢您抽出宝贵时间阅读,我感谢任何帮助。

1 个答案:

答案 0 :(得分: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;
        }

实施例:            if(nextX <0)               printf(&#34;超出范围...... \ n&#34;);