У меня есть необъяснимый вектор вне диапазона ошибки!
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;
Могу поспорить, что установленная вами точка останова не срабатывает, потому что условие не true
: это с currentSemester
являющийся 1
состояние явно false
и код переходит к тому, что происходит после условного блока. Вы не показали, что там происходит, однако.
for (int j = 0; j < currentSemester - 1; j++) { if (studentsVector.at(i)->getPlan().at(j).size() > 0) {
Здесь вы не проверяете, что studentsVector.at(i)->getPlan()
имеет j
элементы. Ваш код просто предполагает это на основе того, что currentSemester
есть, но вы никогда не проверяете. И ясно, что это соотношение где-то нарушено.