0

プログラムを実行しようとすると、「map/set iterator not incrementable」というエラーが表示されます。イテレータを無効にすると発生すると読みましたが、イテレータが指すオブジェクトのみを編集しています。これは正常な動作ですか?私はそれについて何ができますか?この行を削除すると、エラーは発生しません。

iterator->second.neighbour[direction] = &(find_iter->second);

完全なコード:

void Gomoku::addUniqueMap( const map_Map& map_to_add )
{
    this->unique_maps.push_front( map_to_add );

    std::list<map_Map>::iterator map_iter = this->unique_maps.begin();
    map_Iterator iterator = map_iter->begin();

    for( ; iterator != map_iter->end(); ++iterator )
    {
        for( int i = 1, direction = 0; i > -2; --i )
        {
            for( int j = -1; j < 2; ++j )
            {
                if( iterator->second.neighbour[direction] == nullptr )
                {
                    ++direction;
                    continue;
                }
                if( i == 0 && j == 0 )
                    continue;

                COORD pos( iterator->first.x + j, iterator->first.y + i );
                wrap( pos, this->map_size );

                map_Iterator find_iter = map_iter->find( pos );
                if( find_iter != map_iter->end() )
                {
                    iterator->second.neighbour[direction] = &(find_iter->second);
                }

                ++direction;
            }
        }
    }
}

'map_Map' - std::map<COORD, Pawn>
'map_Iterator' - std::map<COORD, Pawn>::iterator
'ポーン' -

struct Pawn
{
    Pawn( Player player );
    Player      player;
    const Pawn* neighbour[8];
};
4

1 に答える 1

0

エラーの原因は、 にアクセスして変更neighbour[8]していたため、配列範囲外の要素を変更していたため、イテレータに対して何かを行った可能性があります。
デバッグ バージョンではmap/set iterator not incrementableエラーが発生しましたが、リリース バージョンではイテレータをインクリメントできず、プログラムが無限ループになりました。

于 2013-04-03T19:12:50.287 に答える