以下目標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