Я создал мультикарту для своих дорожных точек. Ключ относится к номеру дороги, а значения представляют собой точки vec3, из которых состоит дорога.
Я пытаюсь перебрать значения каждой ключевой точки и создать сегмент дороги в каждой точке дороги (кроме последней), настроить значения так, чтобы они находились в точках дороги, а затем сохранить их в std::vector.
Конструктор RoadSegment создает 6 точек vec3 и помещает их в std::vector.
У меня ошибка сегментации в строке, выделенной жирным шрифтом [for(mapIt = it.first; mapIt != it.second; ++mapIt)]
Когда я убираю строки, создающие новые объекты, и помещаю их в std::vector, все работает нормально.
Может кто подскажет в чем проблема/решение проблемы???
Спасибо заранее
std::vector<glm::vec3>::iterator SegIt;
for(int i = 0; i < m_genRoads->getKeyValueData().size(); i++)
{
int numberDesired = m_genRoads->getMultimapData().count(i) - 1;
std::multimap<int, glm::vec3>::iterator mapIt;
std::pair<std::multimap<int, glm::vec3>::iterator, std::multimap<int, glm::vec3>::iterator> it;
it = m_genRoads->getMultimapData().equal_range(i);
for(mapIt = it.first; mapIt != it.second; ++mapIt)
{
int distance = std::distance(it.first, mapIt);
if(distance != numberDesired)
{
RoadSegement* roadSegmentPointer = new RoadSegement();
// FUNCTIONS TO ADJUST COORD VALUES TO MATCH THE ROAD POINTS
m_segmentArray.push_back(roadSegmentPointer);
}
else
{
continue;
}
///SOME BUFFER BINDING STUFF
++mapIt
иmapIt++
делают одно и то же; единственная разница заключается в значении выражения (до или после приращения), которое этот код игнорирует. - person Scott Hunter   schedule 05.01.2015getMultimapData().
Я чувствую, что вы возвращаете временный. - person PaulMcKenzie   schedule 05.01.2015-D_GLIBCXX_DEBUG
, чтобы использовать контейнеры режима отладки, который прервется, как только вы попытаетесь использовать недопустимый итератор. - person Jonathan Wakely   schedule 05.01.2015