Vector insert()导致程序崩溃

时间:2010-05-01 04:59:53

标签: c++ vector insert crash

这是我所拥有的导致我的程序崩溃的函数的第一部分:

vector<Student> sortGPA(vector<Student> student) {
    vector<Student> sorted;
    Student test = student[0];
    cout << "here\n";
    sorted.insert(student.begin(), student[0]);
    cout << "it failed.\n";
         ...

它在sorted部分崩溃,因为我可以在屏幕上看到“here”但不是“它失败了”。出现以下错误消息:

Debug Assertion Failed!

(a long path here...)

Expression: vector emplace iterator outside range

For more information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

我不确定现在是什么导致了这个问题,因为我在其他地方student.insert(student.begin() + position(temp, student), temp);有类似的代码行没有崩溃(其中position返回一个int而temp是另一个声明结构学生)。我该怎么做才能解决问题,第一个插入与第二个插入有什么不同?

2 个答案:

答案 0 :(得分:8)

应该是:

sorted.insert(sorted.begin(), student[0]);

你从错误的实例传递了迭代器。

答案 1 :(得分:3)

使用std::vector::insert ( iterator position, const T& x );时,迭代器position必须指向同一个向量。你正在使用student的{​​{1}}迭代器,它会死掉。