2016-09-24 76 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哈哈,你真的让我 –