C++ 无法解释的';std::超出范围';向量

C++ 无法解释的';std::超出范围';向量,c++,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 &

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

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;
在它检查之前,它只会给我一个
超出范围的错误
!这意味着它甚至不会进入
if(CurrentSerm>1)
但两者之间什么都没有!我的意思是,它怎么会抛出这样的东西,当它抛出错误时,我对任何向量都没有做任何事情

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

进一步资料: 如何声明向量:

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

int currentSemester = 1;
std::vector studentsVector;
本学期:
int=1;

我打赌你设置的断点不会被触发,因为条件不是
真的
:也就是说
currentSerm
1
时,条件显然是
假的
,代码会跳到条件块之后发生的任何事情。然而,你还没有展示正在发生的事情

for(int j=0;jgetPlan().at(j).size()>0){

这里不检查
studentsVector.at(i)->getPlan()
j
元素。你的代码只是根据
CurrentSerm
的内容假设它,但你从来没有检查过。很明显,这种相关性已经在某个地方分解了。

请说明你使用的所有变量是如何声明的。PS:你是在调试模式下编译的吗?因为如果(CurrentSerm>1)不能抛出(假设当前学期为整数)但是,当您使用优化进行编译时,编译器无法真正分辨哪一行对应于什么。什么是
CurrentSerm
?它是如何声明的?还有,
getPlan
返回什么?容器的大小是多少?您确定它小于
CurrentSerm
?我故意做了CurrentSerm循环对于CurrentSterm-1;因为如果它是第一个学期,我不希望它进入循环。CurrentSterm在for学生之前被声明为int。getPlan返回一个向量向量,该向量包含指向课程的指针,我必须说,不相关,我检查了它,它工作正常。请自足测试用例。我建议您不使用任何选项进行构建imization和debug info。然后使用调试器逐行检查此函数,检查所有内容是否正常。这可能意味着您必须在内部
for
循环的
if
语句中拆分复合访问(即,将所有内容放入临时变量中,以确保它们正常)正确。断点根本没有被触发。因为当前学期是1,问题在其他循环中进一步下降。我会检查它。请原谅我的愚蠢。仍然学习C++和所有调试过程。1)它确实有,我声明它硬编码的元素数量甚至比本学期还要多。2)检查上面的答案,它是正确的。调试断点甚至没有在那里触发,问题出在进一步的代码中。它仍然是代码中的一个弱点。需要在远程代码中做一点小的更改才能打破这一点并导致exac这就是你看到的问题。你应该让它更具防御性。
std::vector<Student*> studentsVector;
currentSemester:

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