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

0 1 2 3 4 5 6 のインデックスが付けられた配列には 7 つの項目があります。ループには、配列の範囲外である i = 7 の場合も含まれます。

もう 1 つの問題は、ループ内でベクトルを宣言することです。これは、ループが継続するたびに新しいベクトルが作成されることを意味します。ループの前に宣言する必要があります。

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 で要素にアクセスしようとしますiiisの場合、最初のループで index に要素があるだけiです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;
}

そうすれば、残りのコードに触れることなく、anonlist を編集するだけで済みます。そして、すべての要素がベース URI に設定されたベクターを構築します。

于 2011-04-11T04:23:05.313 に答える