以下目标C++例程(如果我在OS X 10.11上的XCode 7.1中运行足够)最终会在字符串追加上崩溃。调试器告诉我,它每次停在数字23(试图追加数字23)。我想这与内存分配有关。我究竟做错了什么?C++字符串数组追加目标C++崩溃追加
调试器打开下面的return语句中的字符串类和堵塞。在其他调试器窗口中,它表示(lldb),无论如何。
template <class _CharT, class _Traits, class _Allocator>
inline _LIBCPP_INLINE_VISIBILITY
basic_string<_CharT, _Traits, _Allocator>&
basic_string<_CharT, _Traits, _Allocator>::append(const basic_string& __str)
{
return append(__str.data(), __str.size());
}
这是我运行的代码,如果我运行例程足够多的时间,似乎会导致崩溃。 (这是猴子的测试,在那里我在我的目标C/C++应用程序我的设置菜单上点击足够的时间,这引发了下面的函数足够的时间崩溃过程中才存在。)
std::string Minutes[] = {};
std::string s = "";
for (int i = 1; i<= 59; i++) {
s = std::to_string(i);
if (s.length() < 2) {
s = "0" + s;
}
s = ":" + s;
Minutes->append(s);
}
这可能是一个普通的老C++的问题,也许不是一个Objective C++问题。或者,也许这是一个苹果的错误?
注意,我跑了以下变化实验,经过3次尝试100次它永不死机:
std::string Minutes[] = {};
std::string s = "";
for (int i = 1; i<= 59; i++) {
//s = std::to_string(i);
/*
if (s.length() < 2) {
s = "0" + s;
}
s = ":" + s;
*/
//[Minutes->append(s);
Minutes->append("01");
}
此外,下面的代码补丁也运行3倍,达100次,没有一个问题:
const std::string Days[] = {"Su","M","T","W","Th","F","Sa"};
std::string Hours[] = {};
for (int i = 1; i <= 12; i++) {
Hours->append(std::to_string(i));
}
'std :: string Minutes [] = {};'这是无效的C++。但如果是这样,你会期望它做什么? – juanchopanza
初始化一个空数组,以便我可以追加项目到它?我对C++有点绿色。 – Volomike
'Minutes-> append(s)'不会追加到数组中,而是尝试在数组中的第一个'std :: string'上尝试调用'append' - 即使没有一个。 – melak47