2012-06-12 65 views
0

我一直在尋找與迭代器相同的問題;我發現了很多題目幾乎相同的話題,以及類似的問題,但我的觀點有點不同。列表迭代器不可取消

我試圖獲得在特定位置的*迭代器,但我得到的錯誤: 「列表迭代器不deferencable」在運行時,這裏是我的代碼:

CompetidorFormula2000* retornarCompetidorF2000(int pos){ 
     list<Competidor*>::iterator itr=miLista.begin(); 
     CompetidorFormula2000* f1=new CompetidorFormula2000(); 

     if(pos>0 && pos<=miLista.size()){ 
      advance(itr,pos); 

     } 
     f1=(CompetidorFormula2000*) (*itr); 
     return f1; 
     delete f1; 
    } 
+3

Erm,與您描述的問題無關,但是在return之後的任何內容都沒有執行,所以'f1'指向的對象永遠不會被釋放,只會泄漏。 –

+3

與該錯誤消息不相關,但爲什麼要分配一個新對象,然後重新分配其他內容給該指針(泄漏內存)。此外,返回後的代碼將不會被調用,所以刪除將不會執行任何操作(但是如果確實如此,那將會很糟糕)。 – crashmstr

回答

3

如果pos等號miLista.size()然後你會得到一個迭代器到列表的末尾,當你調用miLista.end()時你會得到相同的迭代器。到列表末尾的迭代器是不可解引用

+0

該死的刪除f1;它是一箇舊的錯字,它將if(pos> 0 && pos <= miLista.size())改爲if(pos> 0 && pos dlvx

+1

@JoséDel Valle:我認爲應該是'if(pos> = 0 && pos

+1

@JoséDelValle由於答案是正確的 - 接受它。 –