【问题标题】:Xcode 5.1 std::string concatenation crash on iOS 5.1 devices in release buildsXcode 5.1 std::string concatenation crash on iOS 5.1 devices in release builds
【发布时间】:2014-04-10 22:32:30
【问题描述】:

当使用最新的 XCode 5.1、iOS SDK 7.1 和 LLVM 5.1 构建时,将 libstdc++ 用于 C++ 标准库,仅在 iOS 5.1 设备上的 std::string append 方法会崩溃。

下面是代码示例:

class TestClass
{
public:
    TestClass()
    {
        m_string = "string1";
    }

    void AppendString()
    {
        m_string += std::string("string2");
        std::string newString2 = m_string + "string3";
    }

private:
    string m_string;
};

App 在这一行的 AppendString() 方法中崩溃:

        std::string newString2 = m_string + "string3";

如果我在创建 newString2 之前删除此行 m_string += std::string("string2");,代码可以正常工作。

这是崩溃的堆栈跟踪:

#0  0x34c99fe8 in memcpy$VARIANT$CortexA8 ()
#1  0x3706f95a in std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned long) ()
#2  0x3706fbfa in std::string::reserve(unsigned long) ()
#3  0x3706fdb0 in std::string::append(char const*, unsigned long) ()
#4  0x000c0e5a in std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) [inlined] at /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/include/c++/4.2.1/bits/basic_string.h:2121
#5  0x000c0e3c in TestClass::AppendString() at /Users/sergei/Documents/2_3/House of Fun/cpp/CasinoSceneManager.cpp:122

有没有人经历过同样的崩溃?它仅在装有 iOS 5.1 和 5.1.1 的设备上发生,并且仅当应用程序编译时使用 release 标志,而不是 debug

感谢您的帮助。


还有一个注意事项。 如果我在项目设置的 Code Generation 部分将 Optimization level 更改为 None [-O0],一切正常。 也许这个问题与代码优化有关。

【问题讨论】:

  • 还有一个注意事项。如果我将此行 std::string newString2 = m_string + "string3" 更改为 std::string newString2 = std::string(m_string) + "string3" 代码也可以正常工作。
  • 这是您正在运行的唯一代码还是程序正在执行其他操作?听起来有点像无效对象的问题。
  • 这只是一个测试类来显示问题。在我的 iOS 应用程序的主循环中,我使用以下代码调用它:TestClass* c = new TestClass; c-&gt;AppendString();
  • 这是整个班级?如果是,则错误很可能在于周围的代码,其中 something 具有未定义的行为。
  • 我无法显示整个代码,因为项目很大。我只想告诉如果你有 std::string 变量作为类字段,并尝试将它与其他字符串连接并将连接结果分配给其他 std::string 变量,应用程序将崩溃,但仅在 iOS 5.1 设备上.

标签: c++ ios xcode ios7.1 xcode5.1


【解决方案1】:

Apple 为 Xcode 5.1.1 发布了新的 GM 种子。在发行说明中,他们说他们修复了几个崩溃:

修复了针对 iOS 5.1.1 时编译代码崩溃的问题。 (16485980)!

修复了使用 ARC 和 C++ 时编译代码崩溃的问题。 (16368824)

http://adcdownload.apple.com//Developer_Tools/xcode_5.1.1_gm_seed/release_notes_xcode_5.1.1_gm_seed.pdf

【讨论】:

  • 是的,下载 Xcode 5.1.1 解决了这个问题)谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2012-09-19
  • 2015-10-18
  • 2012-04-07
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多