程序在尝试访问映射中不存在的键时崩溃

问题描述 投票:-1回答:1

我正在做一个简单的程序,试图获取映射中不存在的键值对。但是,当我运行代码时,出现运行时错误,提示==8406==WARNING: AddressSanitizer failed to allocate 0x7ffe7f82c881 bytes ==8406==AddressSanitizer's allocator is terminating the process instead of returning 0 ==8406==If you don't like this behavior set allocator_may_return_null=1

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

int main ()
{
    typedef std::map<std::string,int> mymap;
    mymap cnt;

    cnt["a"]=10;

    auto f = first.find("asdasd");
    std::cout << f->second;
    return 0;
}

在我执行f->second的那一行。如何处理地图中不存在密钥的情况?

c++ stl iterator
1个回答
0
投票

假设您的意思

auto f = cnt.find("asdasd");

您需要检查所寻找的密钥是否确实存在

if (f != cnt.end())
    std::cout << f->second;

否则,您将取消引用无效的位置,那就是UB。


0
投票

find专业化的find成员函数如果键不存在,则返回一个过去的迭代器。

所以您需要比较容器的std::map

end()
© www.soinside.com 2019 - 2024. All rights reserved.