2011-04-11 79 views
1

我覺得這是一件容易的事情,但由於某種原因,我無法理解發生了什麼。C++向量字符串for循環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; 
} 

回答

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; 
} 
0

您是通過創建一個新的載體,每次for循環 - 這載體不僅具有阻止範圍內的for循環。您應該將循環中的矢量移出。

1

您每次創建一個新的vector<string>循環,插入一個元素,然後嘗試訪問索引i處的元素。 i0時,第一次通過循環將只有索引i處的元素。

假定您想將nameurl的聲明移到循環的外部,以便對循環的所有迭代使用相同的容器。

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; 
} 

這樣的話,你可以不接觸其他代碼編輯anonlist。並且,它構造了所有元素都設置爲基本URI的向量,這非常好。