在下面的代码片段中,我试图操纵MAP mp中存在的每个列表的内容,但是通过返回指向列表需要修改的列表对应的映射键的指针。我知道可以直接修改列表内容,而不是调用getlist然后修改它,但我是STL和C ++的新手,并尝试通过迭代和迭代来学习STL。
执行以下代码时,会在行#34;(* lit)= 10"处抛出分段错误。任何人都可以帮我理解这里出了什么问题吗?
static void getlist(int num,map<int,list<int>> mp, list<int>** l_ptr )
{
map<int,list<int>>::iterator it = mp.begin();
while( it != mp.end())
{
if(it->first == num )
{
*l_ptr = &(it->second);
return;
}
it++;
}
}
int main()
{
map<int,list<int>> mp;
mp[1] = {2,2,2};
mp[2] = {3,3,3};
mp[3] = {4,4,4};
map<int,list<int>>::iterator it = mp.begin();
list<int>::iterator lit;
list<int>* r_l = new list<int>;
//getlist(it->first,mp,r_l);
while( it != mp.end())
{
getlist(it->first,mp,&r_l);
lit = r_l->begin();
while(lit != r_l->end())
{
(*lit) = 10;
lit++;
}
it++;
}
it = mp.begin();
while( it != mp.end())
{
lit = (it->second).begin();
while(lit != (it->second).end())
{
cout<<(*lit);
lit++;
}
it++;
}
return 0;
}