1

我觉得这很简单,但由于某种原因,我无法理解发生了什么。

当我运行这部分代码时,将 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;
}
4

4 回答 4

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;
}
于 2011-04-11T04:04:47.377 回答
1

vector<string>每次通过循环创建一个新元素,插入一个元素,然后尝试访问 index 处的元素ii第一次通过循环时,索引处只会有一个元素,when iis 0

大概您想将声明移到nameurl循环之外,以便将相同的容器用于循环的所有迭代。

于 2011-04-11T04:04:24.690 回答
0

每次通过 for 循环创建一个新向量 - 此向量仅在 for 循环内具有块范围。您应该将向量移到循环之外。

于 2011-04-11T04:04:13.177 回答
0

做本回答的另一种方法:

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 的向量,这有点好。

于 2011-04-11T04:23:05.313 回答