[英]assertion failure, list iterator not dereferencable
我从以下代码的这一行中得到断言失败“列表迭代器不可取消引用”:
iter2 = iter-> vertex_list.erase(iter2);
我不太确定为什么会这样,我确保列表不为空。 完整代码如下:
void Map_Quad_List::Vertex_List_Duplicate_Removal() {
for (std::list<Map_Polygon>::iterator iter = map_polygon_list.begin(); iter != map_polygon_list.end(); iter++) { //iterate through polygons
std::vector<XMFLOAT3> position_list; //list of vertices already tried
for (std::list<Vertex>::iterator iter2 = iter->vertex_list.begin(); iter2 != iter->vertex_list.end(); iter2++ ) {//iterate through vertices
bool dup = false;
for (std::vector<XMFLOAT3>::iterator pos_list_iter = position_list.begin(); pos_list_iter != position_list.end(); pos_list_iter++) { //check vertex against position_list
if ((!position_list.empty()) && (XMFLOAT3_Comparison(*pos_list_iter, iter2->position))) { //if vertex already exists in position_list
iter2 = iter->vertex_list.erase(iter2); //remove vertex from polygon's vertex_list
dup = true;
}
}
if (dup == false) //if there is not a duplicate in position_list, add it to position_list
position_list.push_back(iter2->position);
}
}
}
map_polygon_list是类类型Map_Polygon的std :: list
Map_Polygon类具有类Vertex的std :: list
顶点是由XMFLOAT3(位置)和XMFLOAT4(颜色)组成的类,此函数仅处理位置(XMFLOAT3)
XMFLOAT3_Comparison是一个函数,用于比较两个XMFLOAT3,如果相同则返回true
看起来iter2
可能会在最里面的for循环中转到iter2
iter->vertex_list.end()
,这将导致此断言,因为指向的项目为null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.