簡體   English   中英

斷言失敗,列表迭代器不可取消

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM