1

ランタイム プログラム オプションを受け入れる次のコード スニペットがあります。コマンドラインに --help がない限り、すべてうまくいきます。--help を呼び出すと、私は受け取ります

malloc: * オブジェクト 0x7fff7b646570 のエラー: 解放されるポインターが割り当てられませんでした *デバッグするために malloc_error_break にブレークポイントを設定します

boost::any::holder クラスで。Implicit_value 設定を削除すると、すべてが正常に機能します (--help を使用しても)。ここで何か不足していますか?

ティア、ニキル

// program options descritor
po::options_description allOpts("");
// general
po::options_description genOpt("General options");
genOpt.add_options()
("help", "produce help message")
;

// mandatory options
po::options_description manOpt("Mandatory options");
manOpt.add_options()
("tilesetData", po::value<std::string>()->required(),
 "tile set image file (required)")
;

// modifiables
po::options_description modifiers("Modifiable options");
modifiers.add_options()
("takeSnaps", po::value<std::string>()->implicit_value("gameShots"),
 "take screen shots after every display refresh")
("music", po::value<std::string>()->implicit_value("NOT_SPECIFIED.mp3"),
 "play the music specified by the file")
;

// compile all options
allOpts.add(genOpt).add(manOpt).add(modifiers);
// parse command line
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, allOpts), vm);

// create help message
if (vm.count("help")) {
    std::cout << allOpts << std::endl;;
    return false;
}



// check program options
try {
    po::notify(vm);
}

catch (std::exception& e){
    std::cerr << "Error: " << e.what() << std::endl;
    return false;
}
catch(...){
    std::cerr << "Unknown error!" << std::endl;
    return false;
}
4

1 に答える 1

0

これは、コンパイラのバージョン間の非互換性が原因であると思われます。おそらく、使用しているブースト バージョンは、プログラムのコンパイルに使用しているバージョンよりも古いバージョンの gcc でコンパイルされています。解決策は、boost のビルドとプログラムのコンパイルに同じコンパイラを使用することです。

于 2013-02-15T21:51:59.130 に答える