我觉得这很简单,但出于某种原因,我无法理解发生了什么。
当我运行我的代码的这部分,即将URL与数组中的字符串元素组合,然后将其推送到字符串向量时,它会成功推送第一个URL,但之后会出现某种内存泄漏?控制台无限循环乱码...
string anonlist[] = {"test1","test2","test3","test4","test5","test6","test7"};
for (int i=0; i<=7; i++)
{
vector<string> nameurl;
nameurl.push_back("http://api.twitter.com/1/users/show.json?screen_name="+anonlist[i]);
cout << nameurl[i] << endl;
}
答案 0 :(得分:6)
数组索引中有7个项目0 1 2 3 4 5 6.你的循环还包括i = 7的情况,它超出了数组的范围。
另一个问题是你在循环内部声明了向量,这意味着每次循环继续时都会创建一个新向量。你应该在循环之前声明它。
string anonlist[] = {"test1","test2","test3","test4","test5","test6","test7"};
vector<string> nameurl;
for (int i=0; i < 7; i++)
{
nameurl.push_back("http://api.twitter.com/1/users/show.json?screen_name="+anonlist[i]);
cout << nameurl[i] << endl;
}
答案 1 :(得分:1)
每次通过循环创建一个新的vector<string>
,插入一个元素,然后尝试访问索引i
处的元素。 i
i
为0
时,第一次循环时只有索引为nameurl
的元素。
据推测,您希望将{{1}}的声明移到循环之外,以便将相同的容器用于循环的所有迭代。
答案 2 :(得分:0)
每次通过for循环创建一个新向量 - 此向量在for循环中只有块作用域。你应该将矢量移到循环之外。
答案 3 :(得分:0)
Ben的答案的另一种方式:
const string anonlist[] = {"test1", "test2", "test3", "test4", "test5", "test6", "test7"};
vector<string> nameurl(sizeof(anonlist) / sizeof(anonlist[0]), "http://api.twitter.com/1/users/show.json?screen_name=");
for (size_t i = 0; i < nameurl.size(); ++i) {
cout << (nameurl[i] += anonlist[i]) << endl;
}
这样,您只需编辑匿名列表而无需触及其余代码。并且,它构造了向量,所有元素都设置为基URI,这很好。