2010-09-08 59 views
2
boost::regex re("^\\s*([_\\w\\.]+)\\s*=\\s*([^\\s]+)$"); 
if(re.empty()){ 
    std::cout<<"How is this possible?"<<std::endl; 
} 

该行打印在我的发行版本中! (调试版本是罚款) 与2008年MSVC(VC 9.0)调试boost :: regex在调试和发布版本上的行为不同

编译器选项工作:

/Od /I "C:\Program Files\boost\boost_1_44_0" /I "C:\gtest-1.5.0\include" /I "include" /I "include\EMP" /I "dependencies\EMP\include" /I "dependencies\APR\apr-1.3.3\include" /I "dependencies\solclient_5.0.0.22\include" /I "dependencies\SS66\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "EMP_WIN_X86_32" /D "_iso_stdcpp_" /D "_CRT_SECURE_NO_DEPRECATE" /D "_SECURE_SCL=0" /D "_EMPAPI_STATIC_BUILD" /D "_EMPAPI_STATIC_LINK" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /fp:fast /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

编译器选项RELEASE:

/O2 /Oi /GL /I "C:\Program Files\boost\boost_1_44_0" /I "C:\gtest-1.5.0\include" /I "include" /I "include\EMP" /I "dependencies\EMP\include" /I "dependencies\APR\apr-1.3.3\include" /I "dependencies\solclient_5.0.0.22\include" /I "dependencies\SS66\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "EMP_WIN_X86_32" /D "_iso_stdcpp_" /D "_CRT_SECURE_NO_DEPRECATE" /D "_SECURE_SCL=0" /D "_EMPAPI_STATIC_BUILD" /D "_EMPAPI_STATIC_LINK" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /fp:fast /Fo"Release\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt

链接器选项用于DEBUG:

/OUT:"C:\WorkFlow\cpp_client_library\Debug\cpp_client_library.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\APR\apr-1.3.3\Release" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\EMP\lib\win32_vc80" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\solclient_5.0.0.22\lib" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\SS66\lib\i86_w32" /LIBPATH:"C:\Program Files\boost\boost_1_44_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" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT emp.lib libsolclient.lib tipc.lib tutil.lib gtestd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

的发布链接器选项:

/OUT:"C:\WorkFlow\cpp_client_library\Release\cpp_client_library.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\APR\apr-1.3.3\Release" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\EMP\lib\win32_vc80" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\solclient_5.0.0.22\lib" /LIBPATH:"C:\WorkFlow\cpp_client_library\workflow_client_cpp\dependencies\SS66\lib\i86_w32" /LIBPATH:"C:\Program Files\boost\boost_1_44_0\stage\lib" /LIBPATH:"C:\gtest-1.5.0\msvc\gtest\Release" /MANIFEST /MANIFESTFILE:"Release\cpp_client_library.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"c:\WorkFlow\cpp_client_library\Release\cpp_client_library.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT emp.lib libsolclient.lib tipc.lib tutil.lib gtest.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

+0

具有访问冲突 – JXITC 2012-02-14 23:52:09

+0

@JXITC同样的问题,你检查出在\t svn.boost.org/trac/boost/ticket/768给出的解释?引用 - “经过与同样的问题长时间调查(实际使用正则表达式时程序退出崩溃)后,我发现这个问题是由混合了VC++ 2005版本引起的:该库是使用VC++ 2005编译的,没有SP1,程序编译为VC++ 2005 with SP1。当我用VC++ 2005 SP1编译库时,问题就没有了。“ – 2012-02-15 17:19:50

回答

0

我搬到使用Visual Studio 2005和问题走了,但现在我越来越近应用程序的最终异常:

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

调用栈是

KERNEL32.DLL!7c812afb()
[下面的帧可能是不正确的和/或缺失,无符号加载KERNEL32.DLL]
KERNEL32.DLL!7c812afb()
msvcp80.dll!7c421201()
msvcp80.dll!7c42394d()
msvcp80.dll!7c423958()
MSVCR80.DLL!78158e89()
MYAPP.EXE!的std :: _树的std ::分配器>,std :: less,std :: all ocator,std :: allocator>>>,0>> :: erase(std :: _ Tree,std :: allocator>,std :: less,std :: allocator,std :: allocator> >>,0 >>: :iterator _Where = {...})第759行
msvcr80.dll!78134c39()
myApp.exe!std :: _ Tree,std :: allocator>,std :: less,std :: allocator,std: :分配器>>>,0>> :: erase(std :: _ Tree,std :: allocator>,std :: less,std :: allocator,std :: allocator>>,0>> :: iterator _First = {...},std :: _ Tree,std :: allocator>,std :: less,std :: allocator,std :: allocator>>>,0>> :: iterator _Last = {...})Line 926 + 0x4f字节 MYAPP.EXE!提振:: re_detail :: w32_regex_traits_implementation ::〜w32_regex_traits_implementation()+将0xC0字节
MYAPP.EXE!提振::详细:: sp_counted_impl_p> ::处置()+ 0xf字节
对myApp .exe!std :: list const>,unsigned long const * >,std :: allocator const>,unsigned long const *>>> :: clear()+ 0x3e bytes myApp.exe!boost :: object_cache> :: data ::〜data()+ 0x6b bytes msvcr80.dll !781319d8()
MSVCR80.DLL!78131a4b()
MYAPP.EXE!__ tmainCRTStartup()线603 KERNEL32.DLL!7c817077()

+0

https://svn.boost.org/trac/boost/ticket/768 – 2010-09-23 16:39:42

相关问题