我目前在C ++中使用分配的矩阵时遇到了麻烦。我有一个可变电路板,我将其分配为8x8矩阵,如下所示:
int **board;
board = new int*[8];
for(int i = 0; i < 8; i ++)
{
board[i] = new int[8];
}
当我在分配矩阵后尝试使用0进行初始化时,如下所示:
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 8; j++)
{
board[i][j] = 0;
}
}
符号板[i] [j]完美无缺。但是当我尝试在另一个函数中使用它时,它并不像我期望的那样工作。我在这样的函数中使用了分配的矩阵作为参数:
int interpretBoard(int ** board, int ** knightsPos)
{
int k, numKnights = 0;
string buffer;
for(int row = 0; row < 8; row++)
{
for(int column = 0; column < 8; column++)
{
cin >> buffer;
switch (buffer[0])
{
case 'e':
board[row][column] = 0;
break;
case 'b':
if (buffer[1] == 'n')
{
board[row][column] = 1;
knightsPos[0][k] = row;
knightsPos[1][k++] = column;
numKnights++;
}
else
{
board[row][column] = 3;
}
break;
case 'w':
if (buffer[1] == 'n')
{
board[row][column] = 2;
knightsPos[0][k] = row;
knightsPos[1][k++] = column;
numKnights++;
}
else
{
board[row][column] = 4;
}
break;
}
cout << "board[" << row << "][" << column <<"]: "
<< board[row][column] << endl;
}
}
return numKnights;
}
当我尝试读取那样的矩阵时,我得到了段错误。我像这样传递参数:
int main(int argc, char** argv) {
int l = 0;
int** board;
int** knightsPos;
vector<int**> boardVector;
vector<int**> knightsPosVector;
vector<int> numKnightsVector;
boardVector[0] = 0;
constructor(board, knightsPos);
while(!cin.eof())
{
numKnightsVector.push_back(interpretBoard(board,knightsPos));
boardVector.push_back(board);
knightsPosVector.push_back(knightsPos);
l++;
}
destructor(board,knightsPos);
return 0;
}
我不知道为什么我可以在代码的一部分中以这种方式扫描矩阵,而不是在另一部分代码中。 我觉得它与我传递参数的方式有关,但我现在不明白它是怎么回事。
答案 0 :(得分:0)
您的问题是int ** board
没有提供有关您为电路板分配的尺寸的任何提示。所以interpretBoard
不知道它必须与8x8板一起使用。
另一种方法是使用一个包含棋盘方块的结构,如
struct board
{
int square[8][8];
};
现在您拥有了解维度的数据类型,而且您不需要动态分配任何内容。