迭代器中的分段错误
segmentation fault in iterator
我已经为我的道路点创建了一个多地图。 key指的是道路编号,values是组成道路的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
问题似乎是您正在使用不存在的迭代器,这都是由于 return 临时对象造成的。
it = m_genRoads->getMultimapData().equal_range(i);
由于 getMultiMapData()
return 是 multimap 的副本,该 multimap 在该行执行后消失,因此使任何迭代器无效。
一个解决方案是return对多图的引用,而不是多图的新副本。
std::multimap<int, glm::vec3>& GenerateRoads::getMultimapData() { return m_roadsMultimap; }
我已经为我的道路点创建了一个多地图。 key指的是道路编号,values是组成道路的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
问题似乎是您正在使用不存在的迭代器,这都是由于 return 临时对象造成的。
it = m_genRoads->getMultimapData().equal_range(i);
由于 getMultiMapData()
return 是 multimap 的副本,该 multimap 在该行执行后消失,因此使任何迭代器无效。
一个解决方案是return对多图的引用,而不是多图的新副本。
std::multimap<int, glm::vec3>& GenerateRoads::getMultimapData() { return m_roadsMultimap; }