C++ tictaktoe数组绑定溢出

C++ tictaktoe数组绑定溢出,c++,arrays,C++,Arrays,我需要这个代码的帮助,我正在为一个任务工作。我有一个问题,如果我有任何X的董事会上,无论是在左2列,它将显示一个X在上面一行。我使用了我的调试器,它似乎试图访问数组边界之外的内容,但不应该这样。有什么建议吗 #include <iostream> using namespace std; void printTTT(char a[3][3]); void insertX(/*PASS BY REFERENCE*/); void insertO(char (&arr)[3][

我需要这个代码的帮助,我正在为一个任务工作。我有一个问题,如果我有任何X的董事会上,无论是在左2列,它将显示一个X在上面一行。我使用了我的调试器,它似乎试图访问数组边界之外的内容,但不应该这样。有什么建议吗

#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;
                                }

                        }
                }

}
}
}
#包括
使用名称空间std;
无效打印TTT(字符a[3][3]);
void insertX(/*通过引用传递*/);
void insertO(char&arr)[3][3];
作废checkForWin(/*通过引用传递*/);//暂时忽略这一点
int main(){
字符TTTarray[3][3]={{{'X','-','-'},
{ '-','-','-' },
{'X','-','-'};
//字符TTTarray[3][3]={{'-','X','-'},
//{'-',X','-'},
//{'-','-',O'};
//char TTTarray[3][3]={{'-','-','-','-},
//{'-',X','-'},
//{'-',O','-'};
//字符TTTarray[3][3]={{'X','-','X'},
//                        {'-','-','-'},
//{'O','-','-'};
//字符TTTarray[3][3]={{'X','-','X'},
//{'O','X','-'},
//{'O','-','O'};
//insertX(/*CALL*/);
//或
insertO(TTTarray);
printtt(TTTarray);
/*****************
我已经包含了数组的声明,初始化为-for each spot。
“-”代表一个空位置。您应该用
大写字母“O”或大写字母“X”。我还包括了一些初始化数组
进行测试;只需注释掉您当时不想要的内容
*****************/
返回0;
}
void printtt(字符a[3][3])
{
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{

是否可以从
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
为零时,这也将超出界限


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

欢迎使用堆栈溢出!听起来您可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看程序偏离预期的位置。如果要执行任何程序,这是一个必不可少的工具g、 进一步阅读:@NathanOliver我使用了调试器,发现我的x1y值给了我这个问题,但我看不出有什么可以解决这个问题