1

我仍在从 Java 迁移到 C++,并且正在为字符串而苦苦挣扎。我需要生成一些字符串并将它们存储在某个地方,以便在创建它们的对象被销毁后它们可供我的程序使用。我尝试将它们存储在字符串向量中,但我得到了Segmentation Fault-double free。我正在做的一个基本版本,它重现了这个问题:

#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();

我将非常感谢这里发生的事情以及如何避免它的见解。

4

1 回答 1

5

vector.reserve不会改变向量的大小。您将不得不使用resize而不是reserve. 另一种选择是使用push_back()

 storage.push_back(makeString());
于 2013-02-08T12:42:23.647 回答