1

次のコードのこの行から、「listiteratornotdereferrecable」というアサーションエラーが発生します。

iter2 = iter-> verbex_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は、2つのXMFLOAT3を比較し、それらが同じである場合にtrueを返す関数です。

4

1 に答える 1

0

指している項目が null であるため、最も内側の for ループ内にiter2移動する可能性があるように見えます。これにより、このアサートが発生します。iter->vertex_list.end()

于 2012-12-13T02:28:25.323 に答える