向量迭代器+偏移超出范围错误

时间:2017-06-22 15:32:07

标签: c++ vector

我有一个项目,不知怎的,我收到了错误: “矢量迭代器+偏移超出范围”。 有问题的功能是:

vector<Question*> DataBase::initQuestions(int questionNo)
{
    cout << questionNo << endl;
    vector <Question*> vecQu;
    int rc;
    char *zErrMsg = 0;
    string command = "SELECT * FROM questions;";
    rc = sqlite3_exec(db, command.c_str(), callback, 0, &zErrMsg);
    if (rc != SQLITE_OK)
    {
        sqlite3_free(zErrMsg);
        return vecQu;
    }
    initVectors();
    if (questionNo > Questions.size())
    {
        return vecQu;
    }
    while (questionNo != 0)
    {
        int i = rand() % Questions.size(); // picks random question
        vecQu.push_back(new Question(questionNo, Questions[i], currAns[i], 
        Ans2[i], Ans3[i], Ans4[i])); 
        if (Questions.size() == 1)
        {
            questionNo--;
        }
        else
        {
            Questions.erase(Questions.begin() + (i - 1));
            currAns.erase(currAns.begin() + (i - 1));
            Ans2.erase(Ans2.begin() + (i - 1));
            Ans3.erase(Ans3.begin() + (i - 1));
            Ans4.erase(Ans4.begin() + (i - 1));
            cout << "error here?" << endl;
        }
    }
    cout << "all good" << endl;
    return vecQu;
}

问题发生在questionNo!= 0的while循环中。 我认为它发生在所有向量的擦除中。 所有的载体都是全球性的。

vector<string> currAns;
vector<string> Questions;
vector<string> Ans2;
vector<string> Ans3;
vector<string> Ans4;

0 个答案:

没有答案