【发布时间】:2013-12-13 23:58:16
【问题描述】:
我想知道如何解决这个问题,在退出 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...
}
【问题讨论】:
-
我在这段代码 sn-p 中看不到任何内存问题。也许问题出在代码的其他地方?
-
这个程序在 GCC 4.7.2 中没有段错误
-
您应该检查从
mypairs.find(1)返回的迭代器,以防它返回end()迭代器。它在这种情况下有效,因此问题不在您显示的代码中,就像您昨天问这个问题时一样。 -
@Blastfurnace 谢谢。
标签: c++ string vector multimap