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

LeetCode求解两个有序数组的中位数时出现stl_vector.h空指针运行时错误

错误产生原因
  • 核心问题是你声明了空的std::vector<int> nums3后直接使用[]运算符赋值:C++标准库的vector不会在使用下标访问时自动扩容,[]仅允许访问已经被初始化的有效下标位置,你对空vector直接写nums3[k++] = xxx本质是访问未申请的内存区域,属于未定义行为,因此触发了运行时报错。
  • 额外存在逻辑隐患:最终返回中位数时直接对两个int值做整数除法,会丢失小数精度,比如元素和为3时整数除法得到1而非正确的1.5。
修复方案

最简单的修改方式是把所有下标赋值替换为push_back()方法,push_back()会自动处理vector的内存扩容,不需要手动维护下标k,修改后的代码如下:

class Solution {
public: 
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 
        int m = nums1.size(); 
        int n = nums2.size(); 
        vector<int> nums3; 
        int i = 0, j = 0;
        while(i < m && j < n) { 
            if(nums1[i] <= nums2[j]) 
                nums3.push_back(nums1[i++]); 
            else 
                nums3.push_back(nums2[j++]); 
        } 
        while(i < m) nums3.push_back(nums1[i++]); 
        while(j < n) nums3.push_back(nums2[j++]);
        int len = nums3.size();
        if(len % 2 == 0) 
            return (nums3[len/2] + nums3[len/2 - 1]) / 2.0; 
        else 
            return nums3[len/2]; 
    }
};

如果要保留原有下标赋值的写法,也可以在声明nums3时预先分配空间:vector<int> nums3(m + n);,后续的下标赋值逻辑就可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:06:04