2013-02-15 68 views
0

我有以下代碼片段來接受運行時程序選項。一切都很好,只要我沒有 - 在命令行上幫助。在調用--help我收到boost :: program_options在其他地方使用implicit_value時在幫助中崩潰

的malloc:*錯誤對象0x7fff7b646570:被釋放的指針沒有被分配 *設置malloc_error_break斷點上的boost ::任何:: holder類調試

。如果implicit_value設置被刪除,那麼一切運行良好(即使使用--help)。我在這裏錯過了什麼嗎?

TIA, 尼基爾

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

我懷疑這是由於編譯器版本之間的不兼容。可能你正在使用的boost版本是用比你用來編譯程序的版本更早的gcc版本編譯的。解決方案是使用相同的編譯器來構建boost和編譯程序。

相關問題