You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode695岛屿最大面积代码vector越界运行时错误排查

LeetCode 695 岛屿最大面积题解vector越界问题定位

核心问题

BFS遍历四邻域单元格时,坐标合法性校验不完整,仅判断了坐标小于网格行/列数的上界,未判断坐标不能小于0的下界,导致负数下标访问vector触发越界。

问题位置与触发逻辑

出错代码为BFS循环内的邻域判断片段:

for(int z=0; z<4; z++) {
   int x = a + r[z];
   int y = b + c[z]; 
   if(x<n && y<m && grid[x][y]==1 && !vis[x][y]) { // 缺失x>=0、y>=0判断
       vis[x][y]=1;
       q.push({x,y});
       count++;
   }
}

触发越界的具体场景:

  • 遍历第0行单元格时,向上偏移计算得到x = -1
  • 遍历第0列单元格时,向左偏移计算得到y = -1
    vector的下标接收无符号类型参数,传入负数时会被隐式转换为一个值极大的无符号整数,最终访问到vector预留内存范围之外的地址,和报错信息里提到的「无符号偏移加法溢出、访问到比vector起始地址更低的内存位置」完全匹配,触发未定义行为拦截。

修复方案

补全坐标下界校验,将判断条件修改为:

if(x >= 0 && x < n && y >= 0 && y < m && grid[x][y] == 1 && !vis[x][y])

可选优化:可以在函数开头增加空网格判断,if(grid.empty()) return 0;,避免输入空网格时取grid[0].size()触发越界。

内容的提问来源于stack exchange,提问作者Het Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:54:23