我仍然从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;
}
Run Code Online (Sandbox Code Playgroud)
调试器标记行中的错误:
storage[0] = makeString();
Run Code Online (Sandbox Code Playgroud)
我将非常感谢并深入了解这里发生了什么,以及如何避免它.
vector.reserve不会改变矢量的大小.你将不得不使用resize而不是reserve.另一种选择是使用push_back():
storage.push_back(makeString());
Run Code Online (Sandbox Code Playgroud)