为什么我在插入地图时遇到 seg 错误

Why am I getting a seg fault when inserting into a map?

本文关键字:遇到 seg 错误 地图 插入 为什么      更新时间:2023-10-16

我正在尝试将一个地图的内容插入到另一个地图中。这是代码:

std::map<std::string, int> Student::getGrades() const;
...
for(set<Student*, Cmp>::const_iterator it = s.begin(); it!=s.end(); ++it)
{
    grades.clear();
    grades.insert((*it)->getGrades().begin(), (*it)->getGrades().end());
    for(map<string, int>::const_iterator itt = grades.begin(); itt!=grades.end(); ++itt)
    {
       if(itt->first == course && itt->second >= score1 && itt->second <= score2)
            (*it)->display(cout);
    }
}

s 是一个包含指向学生对象的指针的集合,每个学生对象都有一个返回映射的 getGrades() 方法。我正在尝试查找与我从文件中读入的成绩相匹配的成绩,并打印与这些成绩相对应的记录。但是,插入方法给了我一个 seg 错误。有什么建议吗?

如果getGrades()返回成绩图的副本而不是参考,则begin()end()将属于 2 个不同的地图。

您可能应该制作一个本地副本,并像这样简化代码:

for(set<Student*, Cmp>::const_iterator it = s.begin(); it!=s.end(); ++it)
{
    map<string, int> grades = (*it)->getGrades();
    for(map<string, int>::const_iterator itt = grades.begin(); itt!=grades.end(); ++itt)
    {
        if(itt->first == course && itt->second >= score1 && itt->second <= score2)
            (*it)->display(cout);
    }
}

在设置s中可能存在未初始化的指针。