向量的原因不明'std :: out_of_range'

时间:2012-11-18 13:13:52

标签: c++

我有一个无法解释的矢量超出范围错误!

for (unsigned int i = 0; i < studentsVector.size(); i++) {

    bool anyFailedFacultyCourse = false;
    bool anyFailedElectiveCourse = false;
    // Check if all faculty courses are done
    std::cout << currentSemester << std::endl;
    if (currentSemester > 1) {
        std::cout << "hi" << std::endl;

        for (int j = 0; j < currentSemester - 1; j++) {
            if (studentsVector.at(i)->getPlan().at(j).size() > 0) {

                anyFailedFacultyCourse = true;
            }
        }

        std::cout << "bye" << std::endl;

调试之后,我注意到程序确实进入第一个for循环,为AnyFailedFacultyCourseanyFailedElectiveCourse分配正确的值,打印int currentSemester。它停止了! 我把调试断点放在:

if (currentSemester > 1)

它甚至在检查之前给了我out_of_range error!这意味着它甚至没有进入if (currentSemester > 1) 但两者之间什么都没有!我的意思是,它怎么可能抛出这样的东西,当它抛出错误时,我没有任何向量!

我知道这有点神秘,请求您提供所需的任何进一步信息。

更多信息: 如何宣布学生的载体:

std::vector<Student*> studentsVector;
currentSemester:

int currentSemester = 1;

2 个答案:

答案 0 :(得分:2)

我敢打赌,您设置的断点未被触发,因为条件不是truecurrentSemester 1 false条件显然为{{1}}且代码跳过条件块之后发生的任何事情。但是,你没有在那里展示正在发生的事情。

答案 1 :(得分:0)

for (int j = 0; j < currentSemester - 1; j++) {
       if (studentsVector.at(i)->getPlan().at(j).size() > 0) {

此处,您不会检查studentsVector.at(i)->getPlan()是否有j元素。您的代码只是基于currentSemester的内容来假定它,但您从不检查。很明显,这种相关性在某处已经破裂。