我目前在C++中使用分配的矩陣時遇到了麻煩。我有一個變量板,我分配是一個8×8矩陣是這樣的:使用動態分配的矩陣
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;
}
}
的符號板[我] [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;
}
我不知道爲什麼我能掃矩陣方式的代碼的一部分,但不是在另一個。 我覺得它與我傳遞參數的方式有關,但我不明白它現在是怎麼回事。
[SSCCE](http://sscce.org)。另外,使用'std :: vector'。 – 2013-03-17 05:01:32
你得到一個segfault在哪裏? – 2013-03-17 05:08:11
發佈'interpretBoard'的整個主體。 – Shoe 2013-03-17 05:08:31