5

Windows XP SP3 で動作する Boost 1.47.0 を使用する Visual Studio 2008 C++03 アプリケーションがあります。

呼び出しは例外をboost::filesystem::create_directories( L"c:\\foo\\bar" );スローしstd::bad_allocます。

出力ウィンドウに、次のデバッグ ヒープ メッセージが表示されます。「HEAP[test.exe]: 無効な割り当てサイズ - CDCDCDCE (exceeded 7ffdefff)」

コールスタックは、boost.filesystem が新しいロケールを作成し、Microsoft 標準ライブラリ ファイル xlocale 行 309 で最後に表示されるコード行を示しています。

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    

この問題を解決する方法を提案できる人はいますか?

EDIT 1.50.0をブーストするように更新しました。問題は残ります。

4

2 に答える 2

2

これは、DEBUG ビルドを実行する際の Microsoft の実装における既知のバグのようです。std::locale2012 年 6 月に報告されました。

このバグで説明されているように、メモリ アドレス CDCDCDCE に関して表示されるメッセージは、削除されたメモリへのアクセスを意味します。

現在、Microsoft のサイトに記載されている解決策はありませんが、に変更L"c:\\foo\\bar"して別の面を試すことをお勧めし"c:\\foo\\bar"ます。

于 2012-08-29T22:00:46.513 に答える
0

この問題は、不一致のようなにおいがします_SECURE_SCL(または、多少関連している可能性_HAS_ITERATOR_DEBUGGINGがありますが、コール スタックが非デバッグ ビルドを示しているため、後者には疑問があります)。いくつかの情報についてはhttps://stackoverflow.com/a/6104239/12711を参照し、リンクされ_SECURE_SCLているビルドtest.exeとブースト ファイルシステム ライブラリで同じように定義されていることを確認してください。

私の知る限り、ブーストはVCのデフォルトを使用します(これは_SECURE_SCL=1VS2008のリリースビルドにもあります)。設定_SECURE_SCL=0している場合、問題になる可能性があります。

于 2012-08-30T07:44:16.107 に答える