当implicit_value在其他地方使用时,boost :: program_options在帮助时崩溃

时间:2013-02-15 21:37:41

标签: c++ boost-program-options

我有以下代码片段来接受运行时程序选项。只要我没有 - 在命令行上帮助,一切都运行良好。在调用--help我收到

malloc: *对象0x7fff7b646570的错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试

在boost :: any :: holder类上。如果remove_value设置被删除,一切都很好(即使使用--help)。我在这里错过了什么吗?

TIA, NIKHIL

// 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;
}

1 个答案:

答案 0 :(得分:0)

我怀疑这是由于编译器版本之间不兼容。您正在使用的boost版本可能是使用旧版本的gcc编译的,而不是用于编译程序的版本。解决方案是使用相同的编译器来构建boost和编译程序。