gpt4 book ai didi

c++ - 迭代器中的段错误

转载 作者:行者123 更新时间:2023-11-28 06:29:56 26 4
gpt4 key购买 nike

我已经为我的道路点创建了一个多 map 。 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

最佳答案

问题似乎是您正在使用不存在的迭代器,所有这些都是由于返回了一个临时对象。

it = m_genRoads->getMultimapData().equal_range(i);

getMultiMapData()返回 multimap 的拷贝,该行执行后 multimap 消失,从而使任何迭代器无效。

一种解决方案是返回对 multimap 的引用,而不是 multimap 的新拷贝。

std::multimap<int, glm::vec3>& GenerateRoads::getMultimapData() { return m_roadsMultimap; }

关于c++ - 迭代器中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27784080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com