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

LeetCode运行C++题解触发std::vector空指针引用运行时错误求助

错误根因分析
  • 核心错误:你声明的vector<vector<int>> result是初始化长度为0的空容器,代码中直接通过result[m][k]的方式对未申请的下标位置赋值,此时访问result[m]本身就是访问不存在的元素,触发空指针引用的运行时错误。你提到的「移除自定义比较函数就正常」和当前报错无关,当前提交的代码中不存在自定义比较函数,你可能混淆了不同代码段的报错场景。
  • 次要有问题的写法:int visit[n];属于C标准的变长数组,并非C++标准支持的语法,部分编译器虽然做了兼容但存在稳定性隐患,容易出现栈溢出或者初始化错误。
修复思路
  1. 每次需要新增分组时,先向result中压入一个空的一维vector,再向这个新的一维vector中添加成员,不要直接通过下标赋值。
  2. 把变长数组visit替换为C++标准的vector容器,初始化时直接赋值全0,无需调用memset。
  3. 元素插入统一使用vector的push_back方法,避免手动维护下标带来的越界风险。
修复后可正常运行的代码
class Solution {
public:
    vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
        int n = groupSizes.size();
        vector<int> visit(n, 0); // 替换非标准变长数组,初始化全为未访问
        vector<vector<int>> result;
        for(int i = 0; i < n; i++) {
            if(visit[i] == 1) continue;
            // 新建分组
            vector<int> curGroup;
            curGroup.push_back(i);
            visit[i] = 1;
            int targetSize = groupSizes[i];
            // 匹配同组其他成员
            for(int j = i + 1; j < n && curGroup.size() < targetSize; j++) {
                if(groupSizes[j] == targetSize && visit[j] == 0) {
                    curGroup.push_back(j);
                    visit[j] = 1;
                }
            }
            result.push_back(curGroup);
        }
        return result;
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:18:04