使用动态分配的矩阵

Using dynamically allocated matrices

本文关键字:动态分配      更新时间:2023-10-16

我目前在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;
}

我不知道为什么我可以在代码的一部分中以这种方式扫描矩阵,但在另一部分中却不行。我觉得这与我传递参数的方式有关,但我现在不明白这是怎么错的

您的问题是int ** board没有任何关于您为董事会分配的尺寸的提示。因此,interpretBoard不知道它必须使用8x8板。

另一种方法是使用一个结构体来保存棋盘的正方形,如

struct board
{
    int square[8][8];
};

现在您有了一个知道维度的数据类型,而且您不需要动态分配任何东西。