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