我仍然从Java转向C ++,我正在努力使用字符串。我需要生成一些字符串并将它们存储在某个地方,以便在创建它们的对象被销毁后它们可用于我的程序。我尝试将它们存储在字符串向量中,但我得到了分段错误 - 双重免费。我正在做的基本版本,并且重现问题的地方在这里:
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
std::string makeString(){
std::stringstream s;
s << "Test string";
return s.str();
}
int main(){
std::vector<std::string> storage;
storage.reserve(1);
storage[0] = makeString();
return 0;
}
调试器在行中标记错误:
storage[0] = makeString();
我将非常感谢并深入了解这里发生了什么,以及如何避免它。
答案 0 :(得分:5)
vector.reserve
不会更改矢量的大小。您必须使用resize
代替reserve
。另一种选择是使用push_back()
:
storage.push_back(makeString());