2016-09-24 81 views
-6

誰能告訴我爲什麼這段錯誤?C++向量的字符串段錯誤

vector<string> vec; 
for (int i = 0; i < 1000000; /* 1 million */ i++) { 
    vec.push_back("string"+i); 
} 

編譯在g++-std=c++14

+3

你覺得呢' 「字符串」 + i'實際上呢? –

+0

@πάνταῥεῖ連接 – iPherian

+1

它不。它應用了怪異的指針算術。您正在訪問超出範圍的地址,而且您無權訪問。 –

回答

4

由於潘塔-REI正確地指出,它看起來像你想包含的字符串形式

"string" + string form of (i) 

但你實際上在做指針算術我這在這種情況下是不合邏輯的(你只是傳遞了一個從某個位置遞增的指針i - 誰知道那個內存中有什麼?)。

爲了做你想做的事,你可以使用std::to_string,它會將i翻譯成合適的C++字符串。加上一個C風格的字符串,is OK

你行更改爲

vec.push_back("string"+to_string(i)); 
2
vector<string> vec; 
for (int i = 0; i < 1000000; i++) { 
    vec.push_back("string" + to_string(i)); 
} 

這不是PHP ...

+3

或JavaScript或Perl,或... –

+0

@KyleStrand哈哈,你真的讓我 –