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

C++读取CSV文件段错误提示memmove-vec-unaligned-erms.S不存在如何解决

问题根因

你遇到的段错误和out_of_range异常都是二维vector越界访问导致的,具体有3个核心问题:

  • 第二个写入循环的列索引j未逐行重置:j只在进入写入循环前初始化一次,处理完第一行后j已经等于列数,第二行开始写入时直接从超过列数的索引位置写入,必然触发越界。
  • 行列变量和vector实际大小不匹配:从你给出的类定义来看,你的setRow、setColumn函数大概率只修改了row、column两个int成员变量的值,没有同步对cellcontainer执行resize操作,二维vector的实际大小和你记录的行列数完全不匹配,访问超过vector实际大小的索引自然触发异常。
  • 列数统计错误:第一个预扫描循环统计每行的列数时,初始值cols = 1,每读到一个字段就+1,最终统计出来的数值比真实列数多1,就算你正确调整了vector大小,也会多分配冗余的列空间。

修复方案

第一步:修正setRow、setColumn实现

先保证修改行列数时同步调整vector的实际大小:

void Table::setRow(int new_row) {
    row = new_row;
    // 调整总行数
    cellcontainer.resize(row);
    // 保证所有行的列数和当前column值一致
    for (auto& row_vec : cellcontainer) {
        row_vec.resize(column);
    }
}

void Table::setColumn(int new_col) {
    column = new_col;
    // 调整每一行的列数
    for (auto& row_vec : cellcontainer) {
        row_vec.resize(column);
    }
}

第二步:修正read_file函数逻辑

修复列数统计、j未重置的问题,同时加上状态重置避免旧数据干扰:

void Table::read_file(std::string f_str) {
    std::fstream file;
    std::string line;
    file.open(f_str, std::ios::in);
    if (!file) { 
        incorrect_input(); 
        return;
    }
    // 先清空原有表格状态
    setRow(0);
    setColumn(0);

    // 预扫描调整表格大小
    while (std::getline(file, line)) 
    {
        std::istringstream iss(line);
        std::string result;
        int cols = 0; // 初始值改为0,统计真实列数
        while (std::getline(iss, result, sep))
        {
            cols++;
        }
        if (getColumn() < cols) { 
            setColumn(cols); 
        }
        setRow(getRow() + 1);
    }
    file.clear();
    file.seekg(0, std::ios_base::beg);

    // 写入内容
    int i = 0;
    while (std::getline(file, line)) 
    {
        std::istringstream iss(line);
        std::string result;
        int j = 0; // j放到行循环内部,每处理一行自动重置为0
        while (std::getline(iss, result, sep))
        {
            cellcontainer.at(i).at(j) = result;
            j += 1;
        }
        i += 1;
    }
    file.close();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:01