gpt4 book ai didi

c++ - C++ 字符串数组 append 上的 objective-c ++ 崩溃

转载 作者:行者123 更新时间:2023-11-28 05:54:17 32 4
gpt4 key购买 nike

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

调试器打开字符串类并卡在下面的返回语句上。在另一个调试器窗口中,它显示 (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++ 问题,也许不是一个 Objective C++ 问题。或者,也许这是一个 Apple 错误?

请注意,我对以下更改进行了实验,在 100 次尝试 3 次后,它从未崩溃:

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 append 到 Minutes[] 数组中的第一个空字符串。

更新:

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

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

关于c++ - C++ 字符串数组 append 上的 objective-c ++ 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558287/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com