2016-10-03 42 views
-2

我需要帮助为这个代码,我正在为一项任务。我有这个问题,如果我在任何左边2列的板上有任何X,它将在上面的行中显示X.我用我的调试器,它似乎试图访问数组边界外的东西,但它不应该是。有关如何做到这一点的任何建议?tictaktoe数组绑定溢出

#include <iostream> 
using namespace std; 

void printTTT(char a[3][3]); 
void insertX(/*PASS BY REFERENCE*/); 
void insertO(char (&arr)[3][3]); 
void checkForWin(/*PASS BY REFERENCE*/); // IGNORE THIS FOR NOW 

int main() { 

     char TTTarray[3][3] = { { 'X','-','-' }, 
           { '-','-','-' }, 
           { 'X','-','-' } }; 

     //char TTTarray[3][3] = { {'-','X','-'}, 
     //      {'-','X','-'}, 
     //      {'-','-','O'}}; 

     //char TTTarray[3][3] = { {'-','-','-'}, 
     //      {'-','X','-'}, 
     //      {'-','O','-'}}; 

     //char TTTarray[3][3] = { {'X','-','X'}, 
     //      {'-','-','-'}, 
     //      {'O','-','-'}}; 

     //char TTTarray[3][3] = { {'X','-','X'}, 
     //      {'O','X','-'}, 
     //      {'O','-','O'}}; 


     //insertX(/*CALL*/); 
     //OR 
     insertO(TTTarray); 

     printTTT(TTTarray); 

     /***************** 
     I have included the declaratoin of the array, initialized to - for each spot. 
     The '-' represents an empty position. You should fill it with either a 
     capital 'O' or a capital 'X'. I have also included a number of initialized arrays 
     to test; just comment out the ones you don't want for that moment 
     *****************/ 
     return 0; 
} 

void printTTT(char a[3][3]) 
{ 
     for (int i = 0; i < 3; i++) 
     { 
       for (int j = 0; j < 3; j++) 
       { 
         cout << a[i][j]; 
       } 
cout << endl; 
     } 
} 

void insertX(/*PASS BY REFERENCE*/) { 

} 

void insertO(char (&arr)[3][3]) 
{ 
     int x1x; 
     int x1y; 
     //int x2x; 
     //int x2y; 

     for (int i = 0; i < 3; i++) 
     { 
       int go = 0; 
       for (int j = 0; j < 3; j++) 
       { 
         if (arr[i][j] == '-') 
         { 
           x1x = i; 
           x1y = j; 
           // looking for 2 x's for the block lol 
           if (x1x == 0 && go == 0) 
           { 
             if (arr[x1x][x1y + 1] == 'X' && arr[x1x][x1y + 2] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x + 1] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x - 2] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
           } 
           if (x1x == 1 && go == 0) 
           { 
             if (arr[x1x][x1y + 1] == 'X' && arr[x1x][x1y + 2] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x + 1] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x - 2] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
} 
           if (x1x == 2 && go == 0) 
           { 
             if (arr[x1x][x1y + 1] == 'X' && arr[x1x][x1y + 2] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x + 1] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x - 2] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
           } 




           if (x1y == 0 && go == 0) 
           { 
             if (arr[x1x + 1][x1y] == 'X' && arr[x1x + 2][x1y] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x - 1][x1y] == 'X' && arr[x1x + 1][x1x] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x - 1][x1y] == 'X' && arr[x1x - 2][x1x] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
           } 
           if (x1y == 1 && go == 0) 
           { 
             if (arr[x1x + 1][x1y] == 'X' && arr[x1x + 2][x1y] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x - 1][x1y] == 'X' && arr[x1x + 1][x1x] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x - 1][x1y] == 'X' && arr[x1x - 2][x1x] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
           } 
           if (x1y == 2 && go == 0) 
                            181,1-8  83% 
{ 
             if (arr[x1x + 1][x1y] == 'X' && arr[x1x + 2][x1y] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x - 1][x1y] == 'X' && arr[x1x + 1][x1x] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
             } 
             if (arr[x1x - 1][x1y] == 'X' && arr[x1x - 2][x1x] == 'X') 
             { 
               arr[i][j] = 'O'; 
               go = 1; 
           } 

         } 
       } 

} 
} 
} 
+0

欢迎来到Stack Overflow!这听起来像你可能需要学习如何使用调试器来遍历代码。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:** [如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

@NathanOliver我使用了调试器,并看到我对x1y的价值给了我这个问题,但我看不出有什么可以解决的问题 – jonnyboy12

回答

1

看看这些线路从insertD功能:

if (x1x == 0 && go == 0) 
{ 
    if (arr[x1x][x1y + 1] == 'X' && arr[x1x][x1y + 2] == 'X') 

在你已经检查了x1x为零这种情况下,但你没有检查x1y。因此,在这种情况下,如果x1y非零,则您将超出范围。

几行下面你有

if (arr[x1x][x1y - 1] == 'X' && arr[x1x][x1x + 1] == 'X') 

这将出界也是如此,当x1y为零。

您需要添加更多检查或重新考虑逻辑。