【问题标题】:Program crashing when concatenating file paths with / using boost::filesystem on Mac在 Mac 上使用 boost::filesystem 连接文件路径时程序崩溃
【发布时间】:2013-09-19 18:00:40
【问题描述】:

当我使用 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 本身。这可能是什么原因,我该如何解决?提前致谢。

【问题讨论】:

  • 将我的编译器从 Apple LLVM 4.2 更改为 LLVM GCC 4.2 修复了该错误。显然,Apple 的编译器将字符串常量存储在 char[1] 缓冲区中。 Boost 将 char[1] 视为空路径并忽略它们,假设 char[1] 仅大到足以容纳终端空字符。这个网站帮助我了解发生了什么:boost.2283326.n4.nabble.com/…
  • can answer your own question(有时间限制)。事实上,您应该回答您的问题,以帮助未来的访问者。
  • 我知道,但由于我的名声太低(我刚加入),我还得再等 6 个小时才能回答我自己的问题。

标签: c++ xcode macos boost filesystems


【解决方案1】:

将我的编译器从 Apple LLVM 4.2 更改为 LLVM GCC 4.2 修复了该错误。

显然,Apple 的编译器将字符串常量存储在 char[1] 缓冲区中。 Boost 将 char[1] 视为空路径并忽略它们,假设 char[1] 仅大到足以容纳终端空字符。

这个网站帮助我了解了正在发生的事情: http://boost.2283326.n4.nabble.com/boost-filesystem-path-operator-is-broken-for-char-1-in-1-48-td4574639.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 2011-02-15
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2021-01-02
    相关资源
    最近更新 更多