我正在做一个简单的程序,试图获取映射中不存在的键值对。但是,当我运行代码时,出现运行时错误,提示==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
的那一行。如何处理地图中不存在密钥的情况?
假设您的意思
auto f = cnt.find("asdasd");
您需要检查所寻找的密钥是否确实存在
if (f != cnt.end())
std::cout << f->second;
否则,您将取消引用无效的位置,那就是UB。