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

C++求解LeetCode不同路径II报vector空指针引用运行时错误

错误触发原因
  1. 核心语法笔误篡改行数值:代码中if(row = 1 && col == 1)使用了赋值运算符=而非相等判断运算符==,由于C++中&&优先级高于=,实际执行逻辑为row = (1 && col == 1),会直接把原本存储行数的row变量覆盖为0或1。如果row被赋值为0,后续创建的dp数组是空vector,访问dp[0][i]时就会触发空指针引用的运行时错误,和你收到的报错信息完全匹配。
  2. 第一列初始化逻辑笔误:处理第一列的代码段存在两处无效写法:
    • 遇到障碍物后对flag的赋值写为了判断语句flag == true,没有实际修改flag的值
    • dp赋值语句写为了无意义的表达式dp[j][0];,没有给对应位置赋值,会导致第一列计算结果异常
  3. 边界值初始化遗漏:新增col>1判断后,当col=1时不会进入第一行初始化逻辑,起点dp[0][0]保留初始值0,和实际应该设置的1不符,会导致单列用例结果错误。
修复方案

你新增的col>1、row>1判断完全不需要,因为前面已经单独处理了row==1、col==1的边界场景,处理完成后会直接return,不会进入后续循环触发越界。修复后的完整代码如下:

int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
    // 提前判空避免输入为空时访问越界
    if(obstacleGrid.empty() || obstacleGrid[0].empty()){
        return 0;
    }
    int row = obstacleGrid.size();
    int col = obstacleGrid[0].size();
       
    if(obstacleGrid[0][0] == 1){
        return 0;
    }
    // 修复单等号为相等判断
    if(row == 1 && col == 1){
        return 1;
    }
        
    vector<vector<int>> dp(row, vector<int>(col, 0));
    // 统一初始化起点值
    dp[0][0] = 1;
    bool flag = false;

    // 初始化第一行
    for(int i = 0; i < col; i++){     
        if(flag || obstacleGrid[0][i] == 1){
            flag = true;
            dp[0][i] = 0;
        }else{
            dp[0][i] = 1;
        }
    }
    if(row == 1){
        return dp[0][col - 1];
    }
        
    flag = false;
    // 初始化第一列
    for(int j = 1; j < row; j++){
        if(flag || obstacleGrid[j][0] == 1){
            // 修复双等号为赋值操作
            flag = true;
            // 修复遗漏的dp赋值
            dp[j][0] = 0;
        }else{
            dp[j][0] = 1;
        }
    }
    if(col == 1){
        return dp[row - 1][0];
    }

    // 填充dp表剩余部分
    for(int i = 1; i < row; i++){
        for(int j = 1; j < col; j++){
            if(obstacleGrid[i][j] == 1){
                dp[i][j] = 0;
            }else{
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
    }
    return dp[row - 1][col - 1];
}

修复的核心点:

  • 把错误的赋值判断改为相等判断row == 1
  • 修正第一列初始化的两处笔误
  • 新增输入空值判断,避免极端输入下的越界
  • 移除不必要的col>1、row>1判断,避免边界初始化遗漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:15:04