我有一个无法解释的矢量超出范围错误!
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循环,为AnyFailedFacultyCourse
和anyFailedElectiveCourse
分配正确的值,打印int currentSemester
。它停止了!
我把调试断点放在:
if (currentSemester > 1)
它甚至在检查之前给了我out_of_range error
!这意味着它甚至没有进入if (currentSemester > 1)
但两者之间什么都没有!我的意思是,它怎么可能抛出这样的东西,当它抛出错误时,我没有任何向量!
我知道这有点神秘,请求您提供所需的任何进一步信息。
更多信息: 如何宣布学生的载体:
std::vector<Student*> studentsVector;
currentSemester:
int currentSemester = 1;
答案 0 :(得分:2)
我敢打赌,您设置的断点未被触发,因为条件不是true
:currentSemester
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
的内容来假定它,但您从不检查。很明显,这种相关性在某处已经破裂。