运行代码时出现错误

Posted

技术标签:

【中文标题】运行代码时出现错误【英文标题】:i am getting error while running the code 【发布时间】:2020-04-30 13:39:43 【问题描述】:

这是 Leetcode 200。问题陈述是: 给定'1'(陆地)和'0'(水)的二维网格图,计算岛屿的数量。岛屿四面环水,由相邻陆地水平或垂直连接而成。您可以假设网格的所有四个边缘都被水包围。

11110
11010
11000
00000

输出:1

在尝试解决此问题时,我遇到了错误 引用绑定到类型为“std::vector >”的空指针 (stl_vector.h)

我得到了一些输入的正确答案,但总的来说,当我提交它时,我遇到了错误。如果有人能帮助我解决这个问题,我将不胜感激。

class Solution 
public:
    int numIslands(vector<vector<char>>& grid) 
        int count=0;
        int n=grid.size();
        int m=grid[0].size();
        if(grid.size()==0 || grid[0].size()==0)
            return 0;
        bool left,right,top,bottum;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            
                   if(grid[i][j]=='1')
                   
                       count++;
                       BFS(grid,i,j);
                   
            
        return count;

   void BFS(vector< vector <char> >& grids,int i,int j)
   
       if(i<0 || j<0 || i>=grids.size() || j>=grids[0].size() || grids[i][j]=='0')
           return ;
       grids[i][j]='0';
       BFS(grids,i+1,j);
       BFS(grids,i,j+1);
       BFS(grids,i-1,j);
       BFS(grids,i,j-1);
   
;

【问题讨论】:

gridgrids 是如何构造的? j&gt;=grids[0].size() 会比j&gt;=grids[i].size() 更安全,因为它是您将访问的行i。 (暂时有人会给你发一个非矩形向量的向量) grids 和 grid 是在 program 中实现的二维向量。我们只需要实现一个返回岛屿数量的函数。 【参考方案1】:

这三个语句顺序不对

    int n=grid.size();
    int m=grid[0].size(); // <-- problem here
    if(grid.size()==0 || grid[0].size()==0)
        return 0;

应该是

    if(grid.size()==0 || grid[0].size()==0)
        return 0;
    int n=grid.size();
    int m=grid[0].size();

否则,当grid.size() 等于零时,访问grid[0] 会发生崩溃。

【讨论】:

但在 if(grid.size()==0);它直接返回 0 它不会检查 grids[0].size()==0;那你能解释一下为什么如果有效 @Doddigirish 它会在这里int m=grid[0].size();总是做这个作业,因为你的语句顺序错误。 @Doddigirish 我已在您的代码中添加了注释,以显示问题所在。

以上是关于运行代码时出现错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我尝试在真实设备中运行代码时出现以下错误?

运行代码时出现用户定义类型未定义错误

运行标量代码时出现Sbt抛出错误

运行 C++ 代码时出现分段错误

运行我的代码时出现分段错误(核心转储)问题

代码在我的系统上运行良好,但 HackerRank 提交时出现分段错误