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

返回二维vector时触发Segmentation Fault(段错误)问题排查求助

解决你的Segmentation Fault问题

我来帮你分析这段代码里导致段错误的原因,以及对应的修复方案:

问题根源

你的段错误大概率是vector越界访问导致的:

  • 你在getting_schedule里预先创建了一个大小为480的二维vector,但如果输入的条目数量超过480(哪怕你主观认为不会),num_of_schedule会递增到480,这时候访问schedule[480][0]就会越界写入内存——这会破坏vector的内部控制结构(比如容量、大小的管理数据),最终在return语句拷贝vector时触发段错误。
  • 另外,即使输入没超480,你返回的vector里会包含大量未使用的默认初始化元素({0,0}),这也不是高效的做法。

修复方案:动态构建vector

最安全的方式是用push_back动态添加元素,让vector自动管理容量,彻底避免越界问题。修改后的代码如下:

#include <vector>
#include <iostream>
using namespace std;

vector<vector<int>> getting_schedule(int &num_of_schedule) {
    vector<vector<int>> schedule;
    int duration;
    int period_ID;
    num_of_schedule = 0; // 重置计数,避免传入的初始值干扰
    while (cin >> duration >> period_ID) {
        // 直接添加新的条目
        schedule.push_back({duration, period_ID - 1});
        num_of_schedule++;
    }
    return schedule;
}

int main() {
    vector<vector<int>> input_schedule;
    int num_of_schedules = 0;
    input_schedule = getting_schedule(num_of_schedules);
    // 现在input_schedule的大小就是实际读取的条目数,没有冗余元素
    return 0;
}

如果你坚持预先分配大小

如果你一定要固定vector的初始大小,那必须在循环里添加越界检查,确保不会访问超出vector范围的元素:

#include <vector>
#include <iostream>
using namespace std;

vector<vector<int>> getting_schedule(int &num_of_schedule) {
    const int MAX_SCHEDULE = 480;
    vector<vector<int>> schedule(MAX_SCHEDULE, vector<int>(2));
    int duration;
    int period_ID;
    num_of_schedule = 0;
    // 添加检查,确保不越界
    while (cin >> duration >> period_ID && num_of_schedule < MAX_SCHEDULE) {
        schedule[num_of_schedule][0] = duration;
        schedule[num_of_schedule][1] = period_ID - 1;
        num_of_schedule++;
    }
    // 可选:截断vector到实际使用的大小,避免返回冗余元素
    schedule.resize(num_of_schedule);
    return schedule;
}

int main() {
    vector<vector<int>> input_schedule(480, vector<int>(2));
    int num_of_schedules = 0;
    input_schedule = getting_schedule(num_of_schedules);
    return 0;
}

这样就能保证永远不会越界访问vector,自然也就不会触发段错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:33:14