我有一个成对的映射到一个向量的向量,看起来像这样:
std::map<std::pair<uint16, uint16>, std::vector<std::vector<uint32> > >
映射填充在类的构造函数中。此类提供了一个公共方法,该方法返回指向std::vector<std::vector<uint32> >
(映射值部分)的指针,如下所示:
typedef std::pair<uint16, uint16> key;
typedef std::vector<std::vector<uint32> > value;
value* FindValues(key someKey) {
std::map<key, value>::const_iterator it;
it = someStore.find(someKey);
if (it != someStore.end())
return &(value)it->second;
return NULL;
}
这是它变得奇怪的时候。在对 FindValues 返回的向量进行迭代时,所有子向量都有一个大的负数(例如 -1818161232)作为它们的第一个值。但是,如果我使用如下函数:
value FindValues(key someKey) {
std::map<key, value>::const_iterator it;
return someStore.find(someKey)->second;
}
...然后该值是正常的。这只发生在所有子向量的索引 0 处的值。但是,使用第二种方法时,如果找不到密钥(原因很明显),我的应用程序会出现段错误。我究竟做错了什么?