首页 > 解决方案 > C ++插入排序错误功能不起作用

问题描述

该程序仅显示一个奇怪的错误,例如:

libc++abi.dylib: terminating with uncaught exception of type std::out_of_range: vector

代码:

void sortlist(vector<int> &list) { // for sorting
    int i, j, temp;
    for (i = 1; i < list.size(); i++) {
        temp = list.at(i);
        j = i - 1;
        while (temp < list.at(j) && j >= 0) {
            list.at(j + 1) = list.at(j);
            j = j - 1;
        }
        list.at(j + 1) = temp;
    }
}

标签: c++

解决方案


temp < list.at(j)超出范围j == -1,因为j >= 0为时已晚。

通常,当您进行此类手动边界检查时,边界检查应始终排在第一位,而不是在您使用索引之后:

while ( j >= 0 && temp < list.at(j))

其实我不明白你得到的错误有什么“奇怪”。使用的唯一动机at是获得该异常。无论是否被抓住,它都会告诉你你已经出界了。使用调试器应该可以帮助您找出错误的确切位置。


推荐阅读