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

求解接雨水问题代码出现的vector空指针引用运行时错误

接雨水问题代码的运行时错误修复

错误原因分析

  • 未初始化left和right的容量:你定义的两个vector是空的,直接通过下标访问(比如left[0])会访问到未分配的内存,触发空指针引用错误。
  • 第一个循环索引越界:初始循环从i=0开始,此时left[i-1]等价于left[-1],属于非法访问数组下标。

修正后的代码

int trap(vector<int>& height) {
    int n = height.size();
    if (n == 0) return 0; // 处理空数组的边界情况
    vector<int> left(n);
    vector<int> right(n);
    
    left[0] = height[0];
    for (int i = 1; i < n; i++) { // 从i=1开始,避免访问left[-1]
        left[i] = max(left[i-1], height[i]);
    }
    
    right[n-1] = height[n-1];
    for (int i = n-2; i >= 0; i--) {
        right[i] = max(right[i+1], height[i]);
    }
    
    int ans = 0;
    for (int i = 0; i < n; i++) {
        ans += min(left[i], right[i]) - height[i];
    }
    return ans;
}

关键修正点说明

  1. 初始化vector容量:vector<int> left(n);和vector<int> right(n);确保两个vector拥有和输入数组相同长度的内存空间,下标访问合法。
  2. 调整第一个循环起始位置:从i=1开始,因为i=0的left值已经提前赋值,同时避免了i=0时访问left[-1]的非法操作。
  3. 新增空数组判断:如果输入的height是空数组,直接返回0,避免后续代码处理n=0时的越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:57:11