Boost::Program_Options unhandled exception due to access violation

-2

I have a program that runs fine in DEBUG mode but in RELEASE mode I get an unhandled exception due to an access violation. I'm pretty sure it's not due to null pointers. Here is the call stack:

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

Code:

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

The exception reads:

Unhandled exception at 0x1026f09b (msvcr90d.dll) in Program.exe: 0xC0000005: Access violation reading location 0x72656d6f.
c++
boost
boost-program-options
asked on Stack Overflow Jun 28, 2011 by Dan • edited Jun 29, 2011 by Dan

2 Answers

0

Something's funky. Why is argc 4233952? Can you verify that that is not just an artifact of the debugger?

I suggest you rebuild your project, and if that doesn't fix it, then debug the program after everything is loaded and look at the "modules" window. You may be mixing incompatible libraries, e.g. release and debug versions of DLL's/EXE's.

Pay special attention to the CRT files that were loaded, msvcr90d, etc. Look at the file version info of all the CRT DLL's that were loaded and verify that they all have the same version.

answered on Stack Overflow Jun 28, 2011 by David Gladfelter
0

I think the problem I may be facing is that my program loads the symbols from the DEBUG CRT DLL's. By the time the access violation occurs, the symbols from the RELEASE CRT DLL's are not loaded. I have checked all the projects involved in my program and they all use a Multi-threaded DLL (/MD) and yet it's still using the debug version of it.

answered on Stack Overflow Jun 29, 2011 by Dan

User contributions licensed under CC BY-SA 3.0