-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;

AnyFailedFacultyCourseデバッグ後、プログラムが最初の for ループに入り、 andに適切な値を割り当てanyFailedElectiveCourse、 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。つまり、条件currentSemester1明確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 に答える