2016-01-01 164 views
0

以下目标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)); 
} 
+0

'std :: string Minutes [] = {};'这是无效的C++。但如果是这样,你会期望它做什么? – juanchopanza

+0

初始化一个空数组,以便我可以追加项目到它?我对C++有点绿色。 – Volomike

+2

'Minutes-> append(s)'不会追加到数组中,而是尝试在数组中的第一个'std :: string'上尝试调用'append' - 即使没有一个。 – melak47

回答

1

如果你打算保持分钟空字符串,请执行以下操作

std::string Minutes[] = {""}; 

然后Minutes->append(s);会将s附加到Minutes []数组中的第一个空字符串。

更新:

首先,你必须创建字符串的动态数组(的std ::向量)的情况下,如果你不知道数组的大小,如下所示,并使用索引来访问从字符串的std ::向量。

// implies that you used #include <string> and #include <vector> 
std::vector<std::string> Minutes; 
Minutes.push_back(s) 
+1

对不起,但这似乎是不好的建议。在他的评论中,他表示他期望追加到数组中,而不是第一个数组元素...... – melak47

+0

但我可以这么说,这个变化确实可以防止程序在猴子测试期间崩溃!好极了!然而,它也告诉我,当我想我追加分钟时,我实际上追加到了一个字符串,而不是一个字符串数组。我如何追加一个字符串数组,就像我成功完成Days一样(尽管我硬编码了那一个)? – Volomike

+0

@Volomike我更新了答案 – Steephen