Необъяснимый ‘std :: out_of_range’ вектора

У меня есть необъяснимый вектор вне диапазона ошибки!

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;

-1

Решение

Могу поспорить, что установленная вами точка останова не срабатывает, потому что условие не true: это с currentSemester являющийся 1 состояние явно false и код переходит к тому, что происходит после условного блока. Вы не показали, что там происходит, однако.

2

Другие решения

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

Здесь вы не проверяете, что studentsVector.at(i)->getPlan() имеет j элементы. Ваш код просто предполагает это на основе того, что currentSemester есть, но вы никогда не проверяете. И ясно, что это соотношение где-то нарушено.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector