boost::regex在调试和发布版本上表现不同

boost::regex在调试和发布版本上表现不同,regex,boost,debugging,release,Regex,Boost,Debugging,Release,这行打印在我的发布版本中!调试版本很好 使用MSVC 2008 vc 9.0 用于调试的编译器选项: /Od/I C:\Program Files\boost\boost\U 1\U 44\U 0/I C:\gtest-1.5.0\include/I include\EMP/I dependencies\EMP\include/I dependencies\APR\APR\APR-1.3.3\include/I dependencies\solclient\U 5.0.0.22\include

这行打印在我的发布版本中!调试版本很好 使用MSVC 2008 vc 9.0

用于调试的编译器选项:

/Od/I C:\Program Files\boost\boost\U 1\U 44\U 0/I C:\gtest-1.5.0\include/I include\EMP/I dependencies\EMP\include/I dependencies\APR\APR\APR-1.3.3\include/I dependencies\solclient\U 5.0.0.22\include/I dependencies\SS66\include/D WIN32/D调试/D(控制台/D EMP赢得(X86)32/D)iso(stdcpp/D)CRT)CRT)安全)不支持(不支持)SCLU 41_EMPAPI_STATIC_BUILD/D_EMPAPI_STATIC_LINK/D_UNICODE/D UNICODE/Gm/EHsc/RTC1/MDd/fp:fast/FoDebug\/FdDebug\vc90.pdb/W3/nologo/c/ZI/TP/errorReport:prompt

用于发布的编译器选项:

/O2/Oi/GL/I C:\Program Files\boost\boost\U 1\U 44\U 0/I C:\gtest-1.5.0\include/I include/I include/I dependencies\EMP\include/I dependencies\APR\APR-1.3.3\include/I dependencies\solclient\U 5.0.0.22\include/I dependencies\SS66\include/D WIN32/D NDEBUG/D EMP\U WIN\U X86\U 32/D\iso\U stdcpp/D\CRT\U安全不推荐_SECURE\u SCL=0/D\u EMPAPI\u STATIC\u BUILD/D\u EMPAPI\u STATIC\u LINK/D\u UNICODE/D UNICODE/FD/EHsc/MD/Gy/fp:fast/FoRelease\/FdRelease\vc90.pdb/W3/nologo/c/Zi/TP/errorReport:prompt

调试的链接器选项:

/输出:C:\WorkFlow\cpp\u client\u library\Debug\cpp\u client\u library.exe/INCREMENTAL/NOLOGO/LIBPATH:C:\WorkFlow\cpp\u client\u library\WorkFlow\u client\u cpp\dependentials\APR\APR-1.3.3\Release/LIBPATH:C:\WorkFlow\cpp\u client\u cpp\dependentials\EMP\lib\win32\u vc80/LIBPATH:C:\WorkFlow\cpp\u client\u library\WorkFlow\u client\u cpp\dependencies\solclient\u 5.0.0.22\lib/LIBPATH:C:\WorkFlow\cpp\client\lib\dependencies\SS66\lib\i86\u w32/LIBPATH:C:\Program Files\boost\boost\boost\u 1\u 44\u 0\stage\lib/LIBPATH:C:\gtest-1.5.0\msvc\gtest\Debug/MANIFEST/MANIFESTFILE:Debug\cpp_client_library.exe.intermediate.manifest/MANIFESTUAC:level='asInvoker'uiAccess='false'/Debug/PDB:c:\WorkFlow\cpp_client_library\Debug\cpp_client_library.PDB/子系统:CONSOLE/DYNAMICBASE/NXCOMPAT/MACHINE:X86/错误报告:PROMPT emp.lib libsolclient.lib tipc.lib tutiil.lib gtestd.lib kernel32.lib user32.lib gdi32.libwinspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

用于发布的链接器选项:

/输出:C:\WorkFlow\cpp\u client\u library\Release\cpp\u client\u library.exe/增量:NO/NOLOGO/LIBPATH:C:\WorkFlow\cpp\u client\u library\WorkFlow\u client\u cpp\dependencies\APR\APR-1.3.3\Release/LIBPATH:C:\WorkFlow\cpp\u client\cpp\dependencidencies\EMP\lib\win32\u vc80/LIBPATH:C:\WorkFlow\cpp\u client\u library\WorkFlow\u client\u cpp\dependencies\solclient\u 5.0.0.22\lib/LIBPATH:C:\WorkFlow\cpp\client\library\SS66\lib\i86\u w32/LIBPATH:C:\Program Files\boost\boost\u 1\u 44\u 0\stage\lib/LIBPATH:C:\gtest-1.5.0\msvc\gtest\Release/MANIFEST/MANIFESTFILE:Release\cpp_client_library.exe.intermediate.MANIFESTUAC/MANIFESTUAC:level='asInvoker'uiAccess='false'/DEBUG/PDB:c:\WorkFlow\cpp_client_library\Release\cpp_client_library.PDB/子系统:CONSOLE/OPT:REF/OPT:ICF/LTCG/DYNAMICBASE/NXCOMPAT/MACHINE:X86/错误报告:PROMPT emp.libsolclient.lib tipc.lib.tutiil.lib gtest.libkernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

我开始使用visual studio 2005,问题消失了,但我现在在应用程序快结束时遇到了一个异常:

myApp.exe中0x0042d935处的未处理异常:0xC0000005:访问冲突读取位置0xe06d7390

调用堆栈是

内核32.dll!7c812afb [下面的帧可能不正确和/或缺失,没有为kernel32.dll加载符号] 内核32.dll!7c812afb msvcp80.dll!7c421201 msvcp80.dll!7c42394d msvcp80.dll!7c423958 msvcr80.dll!78158e89 myApp.exe!std::_树,std::分配器>,std::less,std::分配器,std::分配器>>>,0>>::擦除std:_树,std::分配器>,std::less,std::分配器,std::分配器>>,0>>::迭代器(其中={…}行759 msvcr80.dll!78134c39 myApp.exe!std::_树,std::分配器>,std::less,std::分配器,std::分配器>>>,0>>::擦除std:_树,std::分配器>,std::less,std::分配器,std::分配器>>>,std::分配器,std::iterator,std::分配器>>,0>>::iterator,std::分配器{最后一行926+0x4f字节 myApp.exe!boost::re_detail::w32_regex_traits_实现::~w32_regex_traits_实现+0xc0字节 myApp.exe!boost::detail::sp_counted_impl_p>::dispose+0xf字节 myApp.exe!std::list const>,无符号长常量*>,std::分配器const>,无符号长常量*>>::清除+0x3e字节 myApp.exe!boost::object_cache>::数据::~data+0x6b字节 msvcr80.dll!781319d8 msvcr80.dll!78131a4b myApp.exe__TMAINCRT603启动线
内核32.dll!7c817077

我开始使用visual studio 200 5,问题消失了,但我现在在应用程序结束时遇到了一个异常:

myApp.exe中0x0042d935处的未处理异常:0xC0000005:访问冲突读取位置0xe06d7390

调用堆栈是

内核32.dll!7c812afb [下面的帧可能不正确和/或缺失,没有为kernel32.dll加载符号] 内核32.dll!7c812afb msvcp80.dll!7c421201 msvcp80.dll!7c42394d msvcp80.dll!7c423958 msvcr80.dll!78158e89 myApp.exe!std::_树,std::分配器>,std::less,std::分配器,std::分配器>>>,0>>::擦除std:_树,std::分配器>,std::less,std::分配器,std::分配器>>,0>>::迭代器(其中={…}行759 msvcr80.dll!78134c39 myApp.exe!std::_树,std::分配器>,std::less,std::分配器,std::分配器>>>,0>>::擦除std:_树,std::分配器>,std::less,std::分配器,std::分配器>>>,std::分配器,std::iterator,std::分配器>>,0>>::iterator,std::分配器{最后一行926+0x4f字节 myApp.exe!boost::re_detail::w32_regex_traits_实现::~w32_regex_traits_实现+0xc0字节 myApp.exe!boost::detail::sp_counted_impl_p>::dispose+0xf字节 myApp.exe!std::list const>,无符号长常量*>,std::分配器const>,无符号长常量*>>::清除+0x3e字节 myApp.exe!boost::object_cache>::数据::~data+0x6b字节 msvcr80.dll!781319d8 msvcr80.dll!78131a4b myApp.exe__TMAINCRT603启动线
内核32.dll!7c817077

在访问方面存在相同的问题Violation@JXITC,您是否查看了svn.boost.org/trac/boost/ticket/768上给出的解释?引用在实际使用regex时对程序退出时发生的相同问题崩溃进行长期调查后的话,我发现问题是由混合使用VC++2005版本引起的:库是用VC++2005编译的,没有SP1,程序是用VC++2005编译的,有SP1。当我用VC++2005和SP1编译这个库时,这个问题就消失了Violation@JXITC,您是否查看了svn.boost.org/trac/boost/ticket/768上给出的解释?引用在实际使用regex时对程序退出时发生的相同问题崩溃进行长期调查后的话,我发现问题是由混合使用VC++2005版本引起的:库是用VC++2005编译的,没有SP1,程序是用VC++2005编译的,有SP1。当我用VC++2005和SP1编译库时,问题就解决了。
boost::regex re("^\\s*([_\\w\\.]+)\\s*=\\s*([^\\s]+)$");
if(re.empty()){
  std::cout<<"How is this possible?"<<std::endl;
}