【发布时间】:2021-04-16 22:58:00
【问题描述】:
我在做 leetcode 问题 289. 生命游戏 在运行我粘贴在下面的代码时,出现以下错误
第 1034 行:字符 34:运行时错误:将无符号偏移量添加到 0x608000000020 溢出到 0x608000000008 (stl_vector.h) 摘要:UndefinedBehaviorSanitizer:未定义行为 /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h :1043:34
我尝试使用打印语句来了解问题,这似乎是 for 循环适用于索引 [0] [0] 并且不移动到下一个索引。我也粘贴了下面的打印声明。如果有人可以帮助我,将非常感激
0 代表循环 i 0 代表循环 j 0输入行 0行 1col 1个 0输入行 1行 0col 1个 0输入行 -1行 0col
class Solution {
public:
int countLives(vector<vector<int>>& board, int & i, int &j)
{
int count=0;
vector<vector<int>> directions={{0,1},{1,0},{-1,0},{0,-1},{-1,-1},{1,1}, {-1,1},{1,-1}};
for(int k=0;k<directions.size();k++)
{
int r=(i+directions[k][0]);
cout<<i<<"input row"<<endl;
cout<<r<<"row"<<endl;
int c=j+directions[k][1];
cout<<c<<"col"<<endl;
if(r>=0 && r<board.size() && c>=0 && c<board[0].size() && board[r][c]==1|| board[r][c]==2)
count++;
cout<<count<<"count"<<endl;
}
return count;
};
void gameOfLife(vector<vector<int>>& board) {
if(board.size()==0)
return;
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
cout<<i<<" for loop i "<<j<<" for loop j"<<endl;
int count=countLives(board,i,j);
if(board[i][j]==1 && count<2 || count>3)
board[i][j]=2;
if(board[i][j]==0 && count==3)
board[i][j]=3;
}
}
cout<<"done counting"<<endl;
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
if(board[i][j]==3)
board[i][j]=1;
if(board[i][j]==2)
board[i][j]=0;
}}
}
};
【问题讨论】:
-
按所示编译代码时出现 19 个错误。我建议添加标题。
标签: c++ for-loop indexoutofboundsexception