zhxue_11 2018-12-19 16:19 采纳率: 0%
浏览 564

写并归排序时,提示“段错误 (核心已转储)”

参考的是这个博客,想自己实现一遍,结果不停的报错不知道为什么

#include <iostream>
#include <vector>



void merge(std::vector<int> &nums, int start, int end, std::vector<int> &res);

void mergeSort(std::vector<int> &nums, int start, int end, std::vector<int> &res) {
    if (end - start == 1) {
        if (nums[start] > nums[end]) {
            std::swap(nums[start], nums[end]);
            return;
        }
    } else if (end - start == 0) {
        return;
    } else {
        mergeSort(nums, start, start + (end - start + 1) / 2, res);
        mergeSort(nums, (end - start + 1) / 2 + start + 1, end, res);
        merge(nums, start, end, res);
    }
};

void merge(std::vector<int> &nums, int start, int end, std::vector<int> &res) {
    int leftLen = (end - start + 1) / 2 + 1;
    int leftIdx = start;
    int rightIdx = start + leftLen;
    int resIdex = start;
    while (leftIdx < start + leftLen && rightIdx < end + 1) {
        if (nums[leftIdx] <= nums[rightIdx]) {
                //运行到这里报错,我尝试了下没有超过界限啊
            std::cout << "11" << std::endl;
            res[resIdex++] = nums[leftIdx++];
        } else {
            std::cout << "12" << std::endl;
            res[resIdex++] = nums[rightIdx++];
        }
    }
    while (leftIdx < start + leftLen) {
        std::cout << "2" << std::endl;
        res[resIdex++] = nums[leftIdx++];
    }
    while (rightIdx < end + 1) {
        std::cout << "3" << std::endl;
        res[resIdex++] = nums[rightIdx++];
    }
}

int main(int argc, char const *argv[])
{
    std::vector<int> nums = {1, 5, 7, 3 ,8, 3, 5, 6, 8, 11};
    int n = nums.size();
    std::cout << "Original Nums is" << std::endl;
    for (auto num : nums) {
        std::cout << num << ",";
    }
    std::cout << std::endl;
    std::vector<int> res;
    mergeSort(nums, 0, n - 1, res);
    std::cout << "Sorted Nums is" << std::endl;
    for (auto num : res) {
        std::cout << num << ",";
    }
    std::cout << std::endl;
    return 0;
}

显示结果为:
Original Nums is
1,5,7,3,8,3,5,6,8,11,
1
5
0,2,2,0,2,0,
1
11
段错误 (核心已转储)

  • 写回答

1条回答 默认 最新

  • qq_28805789 2018-12-19 09:40
    关注

    段错误的原因有很多,绝大多数都是指针造成的,或者在变量初始化时分配的资源太少

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀