boost.filesystem create_directories抛出std :: bad_alloc

我有一个使用在Windows XP SP3中运行的Boost 1.47.0的Visual Studio 2008 C ++ 03应用程序。

调用boost::filesystem::create_directories( L"c:\\foo\\bar" ); 抛出一个std::bad_allocexception。

在输出窗口中,我看到一个debugging堆消息:“HEAP [test.exe]:分配大小无效 – CDCDCDCE(超过7ffdefff)”

callstack显示boost.filesystem在Microsoft标准库文件xlocale第309行中创build一个新的语言环境和最后一行可见的代码行。

 msvcp90.dll!std::_Allocate<char>() + 0x17 bytes msvcp90.dll!std::allocator<char>::allocate() + 0xf bytes msvcp90.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy() + 0x70 bytes msvcp90.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow() + 0x26 bytes msvcp90.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign() + 0x50 bytes msvcp90.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >() + 0x24 bytes msvcp90.dll!std::locale::_Locimp::_Locimp() + 0x47 bytes > test.exe!std::locale::locale<windows_file_codecvt>(const std::locale & _Loc={...}, const windows_file_codecvt * _Facptr=0x00b48f60) Line 309 + 0x69 bytes C++ test.exe!`anonymous namespace'::default_locale() Line 735 C++ test.exe!`anonymous namespace'::path_locale() Line 777 + 0x2a bytes C++ test.exe!boost::filesystem3::path::wchar_t_codecvt_facet() Line 797 + 0x25 bytes C++ test.exe!boost::filesystem3::path::codecvt() Line 388 + 0x5 bytes C++ test.exe!boost::filesystem3::path::path<wchar_t const *>(const wchar_t * begin=0x00b460f8, const wchar_t * end=0x00b46116) Line 162 + 0x5 bytes C++ test.exe!boost::filesystem3::path::parent_path() Line 313 + 0x57 bytes C++ test.exe!boost::filesystem3::detail::create_directories(const boost::filesystem3::path & p={...}, boost::system::error_code * ec=0x00000000) Line 832 + 0x13 bytes C++ test.exe!boost::filesystem3::create_directories(const boost::filesystem3::path & p={...}) Line 318 + 0x29 bytes C++ test.exe!wmain(int __formal=1, int __formal=1) Line 112 + 0xc bytes C++ test.exe!__tmainCRTStartup() Line 583 + 0x19 bytes C test.exe!wmainCRTStartup() Line 403 C kernel32.dll!_BaseProcessStart@4() + 0x23 bytes 

有人可以build议如何解决这个问题?

编辑我更新,以提高1.50.0。 问题依然存在。

这个问题在_SECURE_SCL (或者是有些相关的_HAS_ITERATOR_DEBUGGING – 但是我怀疑后者,因为调用堆栈指示一个非调试版本)中有一种不匹配的味道。 有关信息,请参阅https://stackoverflow.com/a/6104239/12711 ,确保_SECURE_SCL在构建test.exe和boost文件系统库的过程中以相同方式定义。

AFAIK,boost将使用VC默认值(即使在VS2008的发布版本中也是_SECURE_SCL=1 ),所以如果你设置_SECURE_SCL=0这可能是问题。

这似乎是在运行DEBUG构建时Microsoft的std::locale实现中的一个已知的错误 。 据报2012年6月。

关于内存地址CDCDCDCE的消息意味着访问被删除的内存,正如这个错误描述的那样。

目前在微软网站上没有提到的解决方案,但我建议通过将L"c:\\foo\\bar"更改为L"c:\\foo\\bar"来尝试一个不同的方面。