C++ tictaktoe数组绑定溢出
我需要这个代码的帮助,我正在为一个任务工作。我有一个问题,如果我有任何X的董事会上,无论是在左2列,它将显示一个X在上面一行。我使用了我的调试器,它似乎试图访问数组边界之外的内容,但不应该这样。有什么建议吗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][
#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值给了我这个问题,但我看不出有什么可以解决这个问题