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

LeetCode 6280题运行时错误求助:reference binding to null pointer of type 'int'

LeetCode 6280题运行时错误排查

错误信息

Line 1034: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9

用户代码

class Solution {
public:
    vector<int> closestPrimes(int left, int right) {
        vector<int> prime_list;
        for (int i = left; i <= right; i++) {
            if (isPrime(i))
                prime_list.push_back(i);
        }
        
        vector<int> res;
        res[0] = -1;
        res[1] = -1;
            
        if (prime_list.size() < 2) return res;
        
        int min_dist = prime_list[1] - prime_list[0];
        res[0] = 0;
        res[1] = 1;
        for (int i = 1; i < prime_list.size(); i++) {
            if (prime_list[i] - prime_list[i-1] < min_dist){
                res[0] = i - 1;
                res[1] = i;
            }
        }
        return res;
    }
    
    bool isPrime(int n) {
        if (n <= 1) return false;
        
        for (int i = 2; i < sqrt(n) + 1; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
    
};

问题分析

  1. 直接触发错误的原因:
    vector<int> res;创建了一个空向量,未分配任何元素空间。直接通过res[0]、res[1]访问元素属于越界操作,会触发空指针引用的运行时错误。

  2. 其他逻辑错误:

    • 结果向量存储的是质数列表的索引,而非题目要求的质数本身,返回值不符合预期。
    • 遍历质数对时,找到更小距离后未更新min_dist,导致后续判断无法正确识别更小的距离。
    • isPrime函数使用sqrt(n)进行浮点运算,可能因精度问题漏判,比如当n是大质数时,sqrt(n)的浮点近似值可能小于真实平方根,导致循环提前结束。

修正方案

class Solution {
public:
    vector<int> closestPrimes(int left, int right) {
        vector<int> prime_list;
        for (int i = left; i <= right; i++) {
            if (isPrime(i))
                prime_list.push_back(i);
        }
        
        // 直接初始化大小为2的向量,默认值-1
        vector<int> res(2, -1);
            
        if (prime_list.size() < 2) return res;
        
        int min_dist = prime_list[1] - prime_list[0];
        // 存储实际质数,而非索引
        res[0] = prime_list[0];
        res[1] = prime_list[1];
        
        // 从第2个质数对开始遍历(索引i从2开始,对应i-1和i的对)
        for (int i = 2; i < prime_list.size(); i++) {
            int current_dist = prime_list[i] - prime_list[i-1];
            if (current_dist < min_dist){
                min_dist = current_dist;
                res[0] = prime_list[i-1];
                res[1] = prime_list[i];
                // 质数最小距离为1(孪生质数),找到后可直接返回,无需继续遍历
                if (min_dist == 1) break;
            }
        }
        return res;
    }
    
    bool isPrime(int n) {
        if (n <= 1) return false;
        // 用i*i <=n替代sqrt(n),避免浮点精度问题
        for (int i = 2; i*i <= n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:55:57