C++字符串数组追加的目标C++崩溃



下面的Objective C++例程,如果我在OS X 10.11上的XCode 7.1中运行足够多,最终会在字符串append上崩溃。调试器向我显示,它每次都会在数字23处停止(试图附加数字23)。我想这与内存分配有关。我做错了什么?

调试器打开字符串类并阻塞下面的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());
}

这是我正在运行的代码,如果我运行该例程足够多次,它似乎会导致崩溃。(这只在猴子测试期间出现,我在Objective 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++问题,也许不是一个目标C++问题。或者,也许这是苹果的一个bug?

请注意,我用以下更改进行了一个实验,在尝试了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));
}

如果您打算在Minutes中保留空字符串,请执行以下

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

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

更新日期:

首先,您必须创建一个字符串的动态数组(std::vector),以防您不知道数组的大小,并使用index从std::vector访问字符串。

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

相关内容

最新更新