0

Boost の Filesystem Path クラスを使用してファイル パスを operator/ と連結すると、そのコード行を実行するとプログラムがクラッシュし、Xcode 4.6.3 を使用する OS X で EXC_BAD_ACCESS 例外がスローされます。

boost::filesystem::path macintoshHD("Macintosh HD");
boost::filesystem::path library("Library");

library = macintoshHD / library; // EXC_BAD_ACCESS

パスを文字列定数または std::strings と連結しようとすると、同じことが起こります。

boost::filesystem::path cwd(boost::filesystem::current_path());

boost::filesystem::path resources = cwd / "Resources"; // EXC_BAD_ACCESS

問題は Boost/Filesystem/Path 自体にあるようです。これの原因は何ですか?どうすれば修正できますか? 前もって感謝します。

4

1 に答える 1

1

コンパイラをApple LLVM 4.2からLLVM GCC 4.2に変更すると、バグが修正されました。

Apple のコンパイラは文字列定数を char[1] バッファに格納しているようです。Boost は char[1] を空のパスとして扱い、char[1] が終端の null 文字を保持するのに十分な大きさであると仮定してそれらを無視します。

この Web サイトは、何が起こっているのかを理解するのに役立ちました: http://boost.2283326.n4.nabble.com/boost-filesystem-path-operator-is-broken-for-char-1-in-1-48-td4574639.html

于 2013-09-20T15:00:40.740 に答える