2010-09-08 56 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

相關問題