-1

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

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 循环,为 and 分配了适当的值AnyFailedFacultyCourseanyFailedElectiveCourse打印了 int currentSemester。它停在那里!我在以下位置放置了一个调试断点:

if (currentSemester > 1)

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

我知道这有点神秘,请询问您需要的任何进一步信息。

更多信息:如何声明学生向量:

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

int currentSemester = 1;
4

2 回答 2

2

我敢打赌,您设置的断点不会被触发,因为条件不是true:也就是说,currentSemester条件1很清楚false,代码会跳到条件块之后发生的任何事情。但是,您还没有展示那里发生了什么。

于 2012-11-18T13:25:30.603 回答
0
for (int j = 0; j < currentSemester - 1; j++) {
       if (studentsVector.at(i)->getPlan().at(j).size() > 0) {

在这里你不检查studentsVector.at(i)->getPlan()j元素。您的代码只是根据实际情况假设它currentSemester,但您从不检查。很明显,这种相关性已经在某个地方崩溃了。

于 2012-11-18T13:33:53.720 回答