Ответ 1
Посмотрите на эту отладочную трассировку. Последнее, что выполнено, - std:: copy (__ first = 0x90c6fa8, __last = 0x90c63bc, __result = 0x90c6878). Оглядываясь на то, что вызвало это, вы назвали вставку, в которой позиция была вставлена как 0x90c63bc. std:: copy копирует диапазон [первый, последний] в результат, который должен иметь место для элементов последнего - первого. Этот вызов имеет последний < во-первых, это незаконно (!), поэтому я предполагаю, что позиция, которую вы даете вставить, неверна. Вы уверены, что vnum нигде не пересекается вдоль линии? В GDB с отображением этой трассы вы должны запустить
кадр 10
print vnum
чтобы проверить. На самом деле, если вы не просто сократили свой вопрос, я только что нашел вашу ошибку. Вторая строка:
new_mesh->Face(face_loc)->vertices.insert(vertices.begin()+vnum+1, new_vertices[j]);
Должно быть:
new_mesh->Face(face_loc)->vertices.insert(new_mesg->Face(face_loc)->vertices.begin()+vnum+1, new_vertices[j]);
Первая строка дает точку вставки относительно начала некоторой другой переменной, называемой вершинами, а не той, которую вы хотите вставить.