boost :: program_options вылетает при помощи, когда implicit_value используется где-то еще

У меня есть следующий фрагмент кода, чтобы принять параметры программы во время выполнения. Все работает хорошо, пока у меня нет —help в командной строке. При вызове —help я получаю

таНос: * ошибка для объекта 0x7fff7b646570: освобожденный указатель не выделен
*
установить точку останова в malloc_error_break для отладки

на повышение :: любой :: держатель класса. Если параметр 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;
}

0

Решение

Я подозреваю, что это связано с несовместимостью версий компилятора. Возможно, версия буста, которую вы используете, была скомпилирована с более старой версией gcc, чем версия, которую вы используете для компиляции программы. Решение состоит в том, чтобы использовать один и тот же компилятор для сборки boost и для компиляции вашей программы.

0

Другие решения

Других решений пока нет …