2017-11-02 12 views
1

イテレータを使用してリストをループし、objまたは同じ時間の配列に逆参照します。これは2つの異なるインスタンスで行いますが、逆参照できないというアサーションエラーが発生していますイテレータイテレータ逆参照アサーションエラー

私は混乱しています。機能の1つではうまく機能しますが、2番目の機能ではエラーが発生しますが、同じ方法でコード化されています。

アサーションエラーがスローされている機能:

Coord backTrack(){ // recalls to intersection where dead-end route was found 
    list<Coord>::iterator it = pathHistory.end(); 
    Coord deadEnd = *it; 
    coordsToUnmark.push_back(deadEnd); 
    pathHistory.pop_back(); 
    return pathHistory.front(); 
} 

この機能では、それが正常に動作します:

int findPath (Maze& theMaze, const Coord& start, const Coord& end, Coord path[]){ 
    patherFinder(theMaze, start.x, start.y, end); 
    list<Coord>::iterator it; 
    int ii = 0; 
    for (it = pathHistory.begin(); it != pathHistory.end(); it++){ 
     path[ii] = *it; 
     ii++; 
} 
+4

'end'を省略することは、定義されていない動作です。もちろん、すべてを説明することができます。それ以外に、あなたがMCVEを投稿していないので何が起こっているのかを知ることはほとんど不可能です。 –

+0

'list'が' std :: list'なら、あなたは '.back()'によって最後の要素を得ることができます。 – vu1p3n0x

+0

'end()'は最後の項目にイテレータを返しません。コンテナが空でない場合は、 'back()'を使用して最後の項目への参照を取得できます。 – VTT

答えて

0

のコメントを読んだ後、私はlist.endを実現()ISN最後の要素、なぜそれが逆参照できなかったのかを説明するリストコンテナ内の最後の要素です。

関連する問題