При сборке с последней версией XCode 5.1, iOS SDK 7.1 и LLVM 5.1 с использованием libstdc ++ для стандартной библиотеки C ++ происходит сбой в std :: string присоединять метод только на устройстве iOS 5.1.
Вот пример кода:
class TestClass
{
public:
TestClass()
{
m_string = "string1";
}
void AppendString()
{
m_string += std::string("string2");
std::string newString2 = m_string + "string3";
}
private:
string m_string;
};
Приложение вылетает в AppendString () метод в этой строке:
std::string newString2 = m_string + "string3";
Если я уберу эту строку m_string += std::string("string2");
перед созданием newString2, код работает нормально.
Вот трассировка стека:
#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 и только если приложение было скомпилировано с релиз флаг, а не отлаживать.
Спасибо вам за помощь.
Еще одна заметка.
Если я изменю Уровень оптимизации в Нет [-O0] в Генерация кода раздел в настройках проекта, все отлично работает.
Возможно, проблема связана с оптимизацией кода.
Apple выпустила новое семя GM для Xcode 5.1.1. В примечаниях к выпуску говорится, что они исправили пару сбоев:
Исправлено падение скомпилированного кода при таргетинге на iOS 5.1.1. (16485980)!
Исправлено падение скомпилированного кода при использовании ARC и C ++. (16368824)
Других решений пока нет …