每天都在头秃 2024-02-28 16:14 采纳率: 96.7%
浏览 6
已结题

C++内存映射出现Segmentation fault (core dumped)

我在完成代码的内存映射部分时,需要对三个大小不同的数据进行分配,使用的是mmap函数,但是我完成这一块的代码后报错Segmentation fault (core dumped)。我自己看了看感觉没有分配错,但是我检查了下似乎到断言Edge部分(也就是最后)是出现了问题,这是为什么?是我分配的方式有问题吗?


int Graph::map_global_graph(const std::string &path) {
    int fd=0;
    // Format of graph.size:
    // |V|:Number of Nodes(4 Bytes), |E|:Number of Relations(4 Bytes)
    // Format of graph:
    // Prefix of Node's edge List ((|V|+1)* 4 Bytes), Relations (|E|* 4 Bytes), Relation weights(|E|* 4 Bytes)

 
    std::string graph_size(path);
    graph_size.append(".size");
    //load_global_graph(path);
    // Answer:
    fd=open(graph_size.c_str(),O_RDONLY);
    //std::cout<<fd<<std::endl;
    //if we get a error(open fail)
    if (fd == -1){
        std::cout<< "Failed to open." << std::endl;
        return -1;
    }
    //get v_cnt,e_cnt
    read(fd, &v_cnt, sizeof(int)); 
    read(fd, &e_cnt, sizeof(int));
    close(fd);
    std::cout<<v_cnt<<" "<<e_cnt<<std::endl;

    //map the data for vertex, edge, weight
    fd=open(path.c_str(),O_RDONLY);
    vertex =(int*)mmap(nullptr, (v_cnt+1)*sizeof(int), PROT_READ, MAP_PRIVATE, fd, 0);
    edge =(int*)mmap(nullptr, e_cnt*sizeof(int), PROT_READ, MAP_PRIVATE, fd, (v_cnt+1)*sizeof(int));
    edge_weights =(int*)mmap(nullptr, e_cnt*sizeof(int), PROT_READ, MAP_PRIVATE, fd, (v_cnt+1+e_cnt)*sizeof(int));

    // Answer
    for (int i=0;i < v_cnt;i++) {
        if(vertex[i]>=vertex[i+1]){
            std::cout<<vertex[i]<<" "<<vertex[i+1]<<" " <<i<<std::endl;
        }
        assert(vertex[i]<vertex[i+1]);
    }
    assert(vertex[v_cnt]==e_cnt);
    std::cout<<vertex[v_cnt]<<" "<<e_cnt<<std::endl;
    for (int i=0;i < e_cnt; i++) {
        assert(edge[i] < v_cnt);
        assert(edge[i] >= 0);
    }
    return fd;
    
}


  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-02-28 18:26
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 如何提取全民K歌没下载过但播放过很多次的音频?
  • ¥15 树莓派运行detect.py
  • ¥15 pdfplumber提起文本内容如何过滤水印内容
  • ¥15 kingbase容器启动失败,sudo:/bin/sudo must be owned by uid 0 and have the setuid bit set
  • ¥20 黑神话悟空调用机械硬盘导致卡顿
  • ¥15 vue中使用antv-x6
  • ¥15 qt编译失败,环境变量已加,但还是报错
  • ¥15 用顺序表实现学生信息的管理: 学生类(Student):学号(no)、姓名(name)、分数(double),对学生信息进行存取、插入、删除、查找操作,给出代码和运行结果图。
  • ¥15 minted包显示缩进符的问题
  • ¥15 根据图片连接电路51单片机proteus汇编语言仿真4位数码管静态显示