1

タイトルが示すように、空白を含み、新しい行を除いて、ファイルからすべての文字を読み取りたいと思います。

ファイルの外観の例。

     .       
##         . :
   #___-     
##
--------------
______________

次に、マップを使用して各文字を整数に変換しています。

地図std::map<char, int> map_converter;

std::ifstream map("level_1.map");

for( int t = 0; t < TOTAL_TILES; t++ ) {
    int tileType = -1;
    char load_type = ' ';

    map >> load_type;
    tileType = map_converter.find(load_type)->second;
    tiles[t] = new Tile(x, y, tileType);
}

コンパイルすると、 `セグメンテーション違反(コアダンプ)のみが発生します

私はどのように行いますか?`

4

1 に答える 1

2

std :: map :: findが値を見つけられなかった場合、返されstd::map::endます。これに関する問題は、割り当てtileType = std::map::end()->secondが無効であるということです。

std::ifstream map("level_1.map");

for( int t = 0; t < TOTAL_TILES; t++ ) {
    int tileType = -1;
    char load_type = ' ';

    map >> std::noskipws >> load_type;

    if (map_converter.find(load_type) == map_converter.end()) {
        continue;
    }
    tileType = map_converter.find(load_type)->second; //this is now safe to do.
    tiles[t] = new Tile(x, y, tileType);
}
于 2012-11-22T19:23:51.003 に答える