使用动态分配的矩阵
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];
};
现在您有了一个知道维度的数据类型,而且您不需要动态分配任何东西。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 二维阵列的动态分配
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存