При сборке с последними версиями XCode 5.1, iOS SDK 7.1 и LLVM 5.1 с использованием libstdc++ для стандартной библиотеки C++ происходит сбой в методе std::string append только на устройстве 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] в разделе Генерация кода в настройках проекта, все будет работать нормально. Возможно, проблема как-то связана с оптимизацией кода.
std::string newString2 = m_string + "string3"
наstd::string newString2 = std::string(m_string) + "string3"
, код также будет работать нормально. - person Sergei   schedule 09.04.2014TestClass* c = new TestClass; c->AppendString();
- person Sergei   schedule 09.04.2014