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; } };
问题分析
直接触发错误的原因:
vector<int> res;创建了一个空向量,未分配任何元素空间。直接通过res[0]、res[1]访问元素属于越界操作,会触发空指针引用的运行时错误。其他逻辑错误:
- 结果向量存储的是质数列表的索引,而非题目要求的质数本身,返回值不符合预期。
- 遍历质数对时,找到更小距离后未更新
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
相关产品推荐
相关产品推荐

