C ++向量字符串for-loop push_back错误

我觉得这是一个明智的选择,但出于某种原因,我无法理解发生了什么。 当我运行我的代码的这部分,即将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;
}
    
已邀请:
索引中有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;
}
    
每次通过循环创建一个新的
vector<string>
,插入一个元素,然后尝试访问索引
i
处的元素。当
i
0
时,第一次循环时只有一个元素在索引
i
处。 大概你想要在循环之外移动
nameurl
的声明,以便相同的容器用于循环的所有迭代。     
您每次通过for循环创建一个新向量 - 此向量在for循环内只有块作用域。您应该将矢量移到循环外部。     
另一种做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,这很好。     

要回复问题请先登录注册