런타임 코드 옵션을 허용하는 다음 코드 단편을 가지고 있습니다. 명령 줄에 --help가 없으면 모든 것이 잘 작동합니다. --help 호출에 나는받을implicit_value가 다른 곳에서 사용될 때 boost :: program_options가 충돌합니다.
의 malloc : *에 대한 오류 객체 0x7fff7b646570 : 포인터 * 가 부스트 :: 어떤 :: 홀더 클래스에
을 디버깅 malloc_error_break에 중단 점을 설정 할당되지 않은 해제되고 . implicit_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;
}