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

C++实现merge sort归并排序时抛出std::out_of_range异常求助

错误原因定位

你代码中存在多处会触发std::out_of_range异常的逻辑错误,具体如下:

  • 第一个while循环条件逻辑错误:原代码写的是while(vec.at(i) <= m && j <= r),正确的左半部分边界判断应该是i <= m。你误将下标边界判断写成了元素值和下标m比较,当i超过左半部分边界m后,仍然会调用vec.at(i)访问越界下标,直接触发越界异常。
  • 临时数组语法不标准+类型不兼容:int temp[vec.size()]属于C++标准不支持的可变长度数组(VLA),仅部分编译器提供扩展支持;同时如果vector存储的元素不是int类型,该数组会发生类型截断错误。建议修改为std::vector<T> temp(vec.size());
  • 临时数组回拷逻辑完全错误:
    1. 循环起始值错误:你写的size_t p = 1,每次归并的处理区间是[l,r],应该从左端点l开始遍历,固定从1开始会漏处理首元素,若l>1还会访问未归并的无效位置
    2. 循环变量类型不匹配:p用无符号的size_t类型,和int类型的r比较会发生隐式转换,可能出现意料之外的逻辑错误
    3. 下标访问越界:完成归并写入后k已经自增到r+1的位置,此时访问temp[k]直接越界,正确的赋值逻辑应该是取p位置的临时值写入原数组
      参考正确写法:
    for(int p = l; p <= r; p++){
        vec.at(p) = temp[p];
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:00:01