2016-01-01 79 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