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 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?