c++ - 断言失败,列表迭代器不可取消引用

标签 c++

我在以下代码中从这一行收到断言失败“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

Vertex是一个类,由一个XMFLOAT3(位置)和一个XMFLOAT4(颜色)组成,这个函数只处理位置(XMFLOAT3)

XMFLOAT3_Comparison 是比较两个 XMFLOAT3 的函数,如果它们相同则返回 true

最佳答案

看起来 iter2 可能会在最内层的 for 循环中转到 iter->vertex_list.end(),这将导致此断言,因为项目指向to 为空。

关于c++ - 断言失败,列表迭代器不可取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851858/

相关文章:

c++ - 实现 memcmp

c++ - openmp parallel for collapse 私有(private)变量外循环

c++ - 将 Google perftools 指定为 g++ 以便在 R 中使用 C++

c++ - 如何从 C++ 中的 vector 中删除条目?

C# 等效于 C++ vector ,具有连续内存?

c++ - 从 lambda 捕获有效变量

c++ - 如何传递函数指针(回调)并在不知道它的类型的情况下调用它?

c++ - 2个相同的代码,一个出错

c++ - 使用 CFileDialog 打开文件失败时如何捕获异常

c++ - 删除后的 CVSListBox 通知