在无序映射中使用find()时出现异常错误

时间:2016-09-11 21:12:20

标签: c++ sfml

我使用SFML Game Development by Example(Raimondas Pupius)创建了一个简单的游戏引擎(第7章)。我得到了编译的代码,但是当我尝试加载地图(文本文件)时游戏崩溃,我无法找到错误的内容。在加载瓷砖时,我当然也从瓷砖表中加载所需的图形,使用:

bool RequireResource(const std::string& l_id) {
    auto res = Find(l_id); // <-- Crash here.
    if (res) {
        ++res->second;
        return true;
    }
    auto path = m_paths.find(l_id);
    if (path == m_paths.end()) { return false; }
    T* resource = Load(path->second);
    if (!resource) { return false; }
    m_resources.emplace(l_id, std::make_pair(resource, 1));
    return true;
}

Find()似乎是罪魁祸首,它看起来像这样:

std::pair<T*, unsigned int>* Find(const std::string& l_id) {
    auto itr = m_resources.find(l_id);              // <-- Crash here.
    return (itr != m_resources.end() ? &itr->second : nullptr);
}

这是m_resources:

std::unordered_map<std::string, std::pair<T*, unsigned int>> m_resources;

0 个答案:

没有答案