C++ C++;多重地图<;int,向量<;字符串>&燃气轮机;内存分配问题

C++ C++;多重地图<;int,向量<;字符串>&燃气轮机;内存分配问题,c++,string,vector,multimap,C++,String,Vector,Multimap,我想知道如何解决这个问题,在退出storeData()后向量(vec,vec2)被销毁,这会导致main()中出现分段错误。 我应该为每个向量(vec,vec2)分配内存吗?如果是的话,那最好的方法是什么? 还有,我怎样才能在之后删除它们? 多谢各位 #include <map> #include <iostream> #include <string> #include <vector> using namespace std; void s

我想知道如何解决这个问题,在退出storeData()后向量(vec,vec2)被销毁,这会导致main()中出现分段错误。 我应该为每个向量(vec,vec2)分配内存吗?如果是的话,那最好的方法是什么? 还有,我怎样才能在之后删除它们? 多谢各位

#include <map>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

void storeData();

multimap<int, vector<string> > mypairs;

void storeData()
{
    vector<string> vec;
    vec.push_back("one");
    vec.push_back("two");

    vector<string> vec2;
    vec2.push_back("alpha");
    vec2.push_back("beta");

    mypairs.insert(make_pair(1, vec));
    mypairs.insert(make_pair(2, vec2));
}

int main(int, char**)
{
    storeData();

    string str;
    vector<string>::const_iterator it;
    multimap<int, vector<string> >::const_iterator res;
    res = mypairs.find(1);
    for(it = res->second.begin(); it < res->second.end(); it++) {
        str = *it;
    }
    //use string str to do something else later...
}
#包括
#包括
#包括
#包括
使用名称空间std;
void storeData();
多重映射对;
void storeData()
{
向量向量机;
向量推回(“一”);
向量推回(“两”);
向量vec2;
vec2.推回(“α”);
vec2.推回(“β”);
mypairs.insert(make_pair(1,vec));
mypairs.insert(make_pair(2,vec2));
}
int main(int,char**)
{
storeData();
字符串str;
向量::常量迭代器it;
多重映射::常量迭代器res;
res=mypairs.find(1);
对于(it=res->second.begin();itsecond.end();it++){
str=*it;
}
//稍后使用字符串str执行其他操作。。。
}

vec
vec2
将被复制到
mypairs
,因此原始对象是否被销毁并不重要


您应该发布更多关于segfault的信息。

我在这个代码片段中没有看到任何内存问题。可能问题出在代码的其他地方?此程序与GCC 4.7.2不兼容。您应该检查从
mypairs返回的迭代器。如果它返回
end()
迭代器,请查找(1)
。它在这个实例中起作用,所以问题不在您显示的代码中,就像您昨天问这个问题一样。@blastfurny谢谢。迭代器insert(const-value_-type&x)将insert只发送对mypairs的引用吗?@user3097451标准库容器包含值而不是引用。该函数只是引用它,以避免不必要的复制。此外,该参数是常量引用,因此如果它只插入引用,您将永远无法修改它,因为它是常量。@DavidBrown是否有办法重用向量中的字符串?@user3097451重用是什么意思?在哪个向量中重用哪些字符串?如果您发布的代码显示了您遇到的问题,这将非常有用,因为您发布的代码看起来很好。