我一直得到这个错误,它让我越来越沮丧,请帮助我



第1034行:Char 9:运行时错误:引用绑定到类型为'std::vector<int,>' (stl_vector.h)的空指针undefinedbehaviorsanititizer: undefinedbehaviorsanititizer: undefinedbehavior/usr/bin/……/lib/gcc/x86_64-linux-gnu/9/…/…/…/include/c++/9/bits/stl_vector.h:1043:9

void gameOfLife(vector<vector<int>>& board) {
vector<vector<int>> newBoard;
for(int i = 0; i < board.size(); i++){
for(int j = 0; j < board[i].size(); j++){
if(board[i][j] == 0 && neibSum(board,i,j) == 3)
newBoard[i][j] = 1;
else if(board[i][j] == 1 && neibSum(board,i,j) > 3)
newBoard[i][j] = 0;
else if(board[i][j] == 1 && neibSum(board,i,j) < 2)
newBoard[i][j] = 0;
else
newBoard[i][j] = 1;
}
}
for(int i = 0; i < board.size(); i++){
for(int j = 0; j < board[i].size(); j++){
cout << newBoard[i][j] << " ";
}
cout << endl;
}

}

你的变量'newboard'是一个大小为0的向量。:

newBoard[i][j] = 1;

你试图访问未分配的内存。您需要首先分配内存(例如使用resize)。

vector<vector<int>> newBoard;
newBoard.resize(board.size());
for(int i = 0; i < board.size(); i++){
newBoard[i].resize(board[i].size());
for(int j = 0; j < board[i].size(); j++){
...

编辑:注:你可以使用。at()函数,而不是[]来访问向量元素:newBoard.at(i).at(j)这包含边界检查。它不会解决你的问题,但它会给你一个更容易理解的错误信息。

您可以在一行中初始化您的板

#include <vector>
// two constants for you board size
// stl containers mostly accept std::size_t for their sizes
constexpr std::size_t board_height_v = 25;
constexpr std::size_t board_width_v = 80;
enum class cell
{
dead,
alive
};
int main()
{
// I made a cell enum so you can more easily spot where the initial cell value is set.
// now lets initialize the board to the correct size
std::vector<std::vector<cell>> newBoard(board_height_v, std::vector<cell>(board_width_v,cell::dead));
return 1;
}

最新更新