我有一個程序在DEBUG模式下運行正常,但在RELEASE模式下,由於訪問衝突,我得到一個未處理的異常。我很確定這不是由於空指針。這裏是調用堆棧:Boost :: Program_Options由於訪問衝突導致未處理的異常
msvcr90d.dll!memchr(unsigned char * buf=0x0000002c, unsigned char chr='', unsigned long cnt=1243588) Line 80 Asm
msvcp90d.dll!std::char_traits<char>::find(const char * _First=0x72656d6f, unsigned int _Count=15, const char & _Ch=',') Line 590 + 0x15 bytes C++
msvcp90d.dll!std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> >::find(const char * _Ptr=0x0012f9e4, unsigned int _Off=0, unsigned int _Count=1) Line 1796 + 0x2d bytes C++
Program.exe!boost::program_options::option_description::set_name() + 0x61 bytes C++
Program.exe!boost::program_options::option_description::option_description() + 0x90 bytes C++
Program.exe!boost::program_options::options_description_easy_init::operator()() + 0x58 bytes C++
Program.exe!CommandLineInput(int count=2, char * * vector=0x003d3360) Line 191 + 0xac bytes C++
Program.exe!main(int argc=4233952, char * * argv=0x00000002) Line 65535 C++
Program.exe!__tmainCRTStartup() Line 582 + 0x17 bytes C
代碼:
namespace po = boost::program_options;
int _tmain(int argc, _TCHAR* argv[])
{
try
{
CommandInput (argc, argv); //get command line input
}
catch (std::exception e)
{
std::cout << "WARNING: Exception is thrown" << std::endl;
return 0;
}
}
void CommandInput (int count, _TCHAR* vector[])
{
po::options_description desc("Available Parameters");
std::cout << "\n";
desc.add_options()
("option1", po::value<std::string>(), "description1")
("option2", po::value<std::string>(), "description2")
("option3", po::value<std::string>(), "description3");
/*
The code breaks at the above line
*/
}
異常寫着:
Unhandled exception at 0x1026f09b (msvcr90d.dll) in Program.exe: 0xC0000005: Access violation reading location 0x72656d6f.
怎麼樣顯示代碼? – Mat
問題是工作相關,所以我不願意發佈任何代碼。但是現在我編輯我的帖子來插入模擬代碼,類似於實際代碼的樣子。 – Dan